본문 바로가기

구현단계 보안약점 기준49

구현단계 보안약점 기준 - 취약한 API 사용 유형API 오용보안약점취약한 API 사용개요취약한 API는 보안상 금지된(banned) 함수이거나, 부주의하게 사용될 가능성이 많은 API를 의미한다. 이들 범주의 API에 대해 확인하지 않고 사용할 때 보안 문제를 발생시킬 수 있다. 금지된 API의 대표적인 예로는 스트링 자료와 관련된 strcat(), strcpy(), strncat(), strncpy(), sprintf() 등이 있다.또한 보안상 문제가 없다 하더라도 잘못된 방식으로 함수를 사용할 때도 역시 보안 문제를 발생 시킬 수 있다.보안대책보안 문제로 인해 금지된 함수는 이를 대체할 수 있는 안전한 함수를 사용한다.그 예로, 위에 언급된 API 대신에 strcat_s(), strcpy_s(), strncat_s(), strncpy_s(), .. 2025. 6. 5.
구현단계 보안약점 기준 - DNS lookup에 의존한 보안결정 유형API 오용보안약점DNS lookup에 의존한 보안결정개요공격자가 DNS 엔트리를 속일 수 있으므로 도메인명에 의존에서 보안결정(인증 및 접근통제 등)을 하지 않아야 한다. 만약, 로컬 DNS 서버의 캐시가 공격자에 의해 오염된 상황이라면, 사용자와 특정 서버 간의 네트워크 트래픽이 공격자를 경유하도록 할 수도 있다.또한, 공격자가 마치 동일 도메인에 속한 서버인 것처럼 위장할 수도 있다.보안대책보안결정에서 도메인명을 이용한 DNS lookup을 하지 않도록 한다.진단방법 DNS lookup을 하는 모듈이 존재하는지 확인하고, 보안결정을 하는 부분이 존재하는지 확인한다. DNS 이름으로 해당 요청이 신뢰할 수 있는지를 검사한다. 그러나 공격자가 DNS 캐시 등 을 조작하면 잘못된 신뢰 상태 정보를 얻.. 2025. 6. 5.
구현단계 보안약점 기준 - Private 배열에 Public 데이터 할당 유형캡슐화보안약점Private 배열에 Public 데이터 할당개요public으로 선언된 메소드의 인자가 private으로 선언된 배열에 저장되면, private배열을 외부에서 접근하여 배열 수정과 객체 속성 변경이 가능해진다.보안대책public으로 선언된 메서드의 인자를 private으로 선언된 배열로 저장되지 않도록 한다. 인자로 들어온 배열의 복사본을 생성하고 clone() 메소드로 복사된 원소를 저장하도록 하여 private변수에 할당하여 private으로 선언된 배열과 객체속성에 대한 의도하지 않게 수정되는 것을 방지한다. 만약 배열 객체의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 인자로 들어온 배열의 복사본을 생성하여 할당한다.진단방법 private 배열이 선언되어 있는지 .. 2025. 6. 5.
구현단계 보안약점 기준 - Public 메소드부터 반환된 Private 배열 유형 캡슐화 보안약점 Public 메소드부터 반환된 Private 배열 개요private로 선언된 배열을 public으로 선언된 메소드로 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열 수정과 객체 속성 변경이 가능해진다.보안대책private로 선언된 배열을 public으로 선언된 메소드로 반환하지 않도록 해야 한다. private 배열에 대한 복사본을 반환하도록 하고 배열의 원소에 대해서는 clone() 메소드로 복사된 원소를 저장하도록 하여 private 선언된 배열과 객체 속성에 대한 의도하지 않게 수정되는 것을 방지한다. 만약 배열의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 Private 배열의 복사본을 만들고 이를 반환하도록 작성한다.진단방법pr.. 2025. 6. 5.
구현단계 보안약점 기준 - 제거되지 않고 남은 디버그 코드 유형 캡슐화 보안약점 제거되지 않고 남은 디버그 코드 개요디버깅 목적으로 삽입된 코드는 개발이 완료되면 제거해야 한다. 디버그 코드는 설정 등의 민감한 정보를 담거나 시스템을 제어하게 허용하는 부분을 담고 있을 수 있다. 만일, 남겨진 채로 배포될 경우, 공격자가 식별 과정을 우회하거나 의도하지 않은 정보와 제어 정보가 노출될 수 있다.보안대책소프트웨어 배포 전, 반드시 디버그 코드를 확인 및 삭제한다. 일반적으로 Java 개발자의 경우 웹 응용 프로그램을 제작할 때 디버그 용도의 코드를 main()에 개발한 후 이를 삭제하지 않는 경우가 많다.디버깅이 끝나면 main() 메서드를 삭제해야 한다.진단방법J2EE를 제외하고 디버그 코드를 정적도구만으로 판단하기는 쉽지 않다.개발 중 테스트 목적으로 남아 있.. 2025. 6. 4.
구현단계 보안약점 기준 - 잘못된 세션에 의한 데이터 정보 노출 유형 캡슐화 보안약점 잘못된 세션에 의한 데이터 정보 노출 개요다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁조건(Race Condition) 발생할 수 있다. 따라서, 다중 스레드 환경인 Java의 서블릿(Servlet) 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여, 서로 다른 세션에서 데이터를 공유하지 않도록 해야 한다.보안대책싱글톤 패턴을 사용하는 경우, 변수 범위(Scope)에 주의를 기울여야 한다. 특히 Java에서는 HttpServlet 클래스의 하위클래스에서 멤버 필드를 선언하지 않도록 하고, 필요한 경우 지역 변수를 선언하여 사용한다.진단방법 HttpServlet의 하위클래스에 멤버필드가 선언되어 있고 final이 아닌 경우는 취약한 것으로 판단한다. 연관된.. 2025. 6. 4.