Notice
Recent Posts
Recent Comments
Link
IgnatiusHeo
구현단계 보안약점 제거 기준-제거되지 않고 남은 디버그 코드 본문
작성일: 230706
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(476~480p)
구분 | - 캡슐화 |
설계단계 | |
개요 | 디버깅 목적으로 삽입된 코드는 개발이 완료되면 제거해야 한다. 디버그 코드는 설정 등의 민감한 정보를 담거나 시스템을 제어하게 허용하는 부분을 담고 있을 수 있다. 만일, 남겨진 채로 배포될 경우, 공격자가 식별 과정을 우회하거나 의도하지 않은 정보와 제어 정보가 노출될 수 있다. |
진단 세부사항 (설계단계) |
|
보안대책 (구현단계) |
소프트웨어 배포 전, 반드시 디버그 코드를 확인 및 삭제한다. 일반적으로 Java 개발자의 경우 웹 응용 프로그램을 제작할 때 디버그 용도의 코드를 main()에 개발한 후 이를 삭제하지 않는 경우가 많다. 디버깅이 끝나면 main() 메서드를 삭제해야 한다. |
진단방법 (구현단계) |
J2EE를 제외하고 디버그 코드를 정적도구만으로 판단하기는 쉽지 않다. ① 개발 중 테스트 목적으로 남아 있는 디버그 코드가 존재하는지 확인한다. J2EE 환경(J2EE Standard)에서는 main 메소드 작성을 금하고 있으며, 일반적으로 개발자들은 디버그 코드를 main으로 작성하므로 main 메소드가 사용되는 경우 디버그코드 인지 확인하여야 한다. |
다. 코드예제
ㅇ 분석
1: class Base64 {
2: public static void main(String[] args) {
3: if (debug) {
4: byte[] a = { (byte) 0xfc, (byte) 0x0f, (byte) 0xc0 };
5: byte[] b = { (byte) 0x03, (byte) 0xf0, (byte) 0x3f };
6: ……
7: }
8: }
9: public void otherMethod() { … }
10:}
ㅇ 수정
1: class Base64 {
2: public void otherMethod() { … }
3: }
ㅇ 내용
1. 디버그코드 제거
ㅇ 분석
1: class Example {
2: public void Log() {
3: //Console.WriteLine 등의 메소드를 사용한 디버그용 코드가 남아있습니다.
4: Console.WriteLine("sensitive info");
5: }
6: }
ㅇ 수정
1: class Example {
2: public void Log() {
3: //디버그용 코드를 삭제해야 합니다.
4: //Console.WriteLine("sensitive info");
5: }
6: }
ㅇ 내용
1. 주석처리 말고 지우면 안돼?
ㅇ 분석
1: void LeftoverDebugCode() {
2: int i, ntprs;
3: char **strings;
4: nptrs = backtrace(buffer, 100);
5: strings = backtrace_symbols(buffer, nptrs);
6: …
7: // 디버그 모드일 시 콜스택을 출력한다
8: if(debug) {
9: for(i=0; i < nptr; i++) printf(“%s\n”, strings[j]);
10: }
11:}
ㅇ 수정
1: void LeftoverDebugCode() {
2: … // 디버그 코드를 삭제하고 동작 코드만 남긴다.
3: }
ㅇ 내용
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
구현단계 보안약점 제거 기준-Private 배열에 Public 데이터 할당 (0) | 2023.07.06 |
---|---|
구현단계 보안약점 제거 기준-Public 메소드부터 반환된 Private 배열 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-잘못된 세션에 의한 데이터 정보 노출 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-신뢰할 수 없는 데이터의 역직렬화 (0) | 2023.07.06 |
구현단계 보안약점 제거 기준-초기화되지 않은 변수 사용 (0) | 2023.07.06 |