보안 공부/소스코드 보안약점 진단

소스코드 보안약점 진단 - 제거되지 않고 남은 디버그 코드

H.J.World 2022. 2. 7. 10:10
728x90
반응형

소스코드 보안약점 진단 // 소프트웨어 보안약점 진단 // SW 보안약점 진단과 같이 다양한 이름으로 불리는 진단 과업 중 하나이다.

SW개발보안은 해킹 등 사이버공격의 원인인 보안약점을 SW개발단계에서 사전에 제거하고 SW 개발 생명주기의 각 단계별로 수행하는 일련의 보안활동을 통하여 안전한 SW를 개발·운영하기 위한 목적으로 적용하는 개발체계이다.

해당 내용은 KISA에서 발간하는 취약점 진단 가이드 항목을 기준으로 작성한다.

 

제 6절 캡슐화

중요한 데이터 또는 기능성을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생하는 보안약점으로 정보노출, 권한문제 등이 발생할 수 있다.


2. 제거되지 않고 남은 디버그 코드

가. 개요

디버깅 목적으로 삽입된 코드는 개발이 완료되면 제거해야 한다. 디버그 코드는 설정 등의 민감한 정보를 담거나 시스템을 제어하게 허용하는 부분을 담고 있을 수 있다. 만일, 남겨진 채로 배포될 경우, 공격자가 식별 과정을 우회하거나 의도하지 않은 정보와 제어 정보가 노출될 수 있다.

나. 보안대책

소프트웨어 배포 전, 반드시 디버그 코드를 확인 및 삭제한다. 일반적으로 Java 개발자의 경우 웹 응용 프로그램을 제작할 때 디버그용도의 코드를 main()에 개발한 후 이를 삭제하지 않는 경우가 많다. 디버깅이 끝나면 main() 메서드를 삭제해야 한다.

다. 코드예제

다음의 예제는 main() 메서드 내에 화면에 출력하는 디버깅 코드를 포함하고 있다. J2EE의 경우 main() 메서드 사용이 필요 없으며, 개발자들이 콘솔 응용프로그램으로 화면에 디버깅코드를 사용 하는 경우가 일반적이다.

- 안전하지 않은 코드의 예 JAVA -

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: }

 

- 안전한 코드의 예 JAVA -

이에 따라 J2EE와 같은 응용프로그램에서 main() 메소드는 삭제한다. J2EE의 main() 메소드의 경우 디버깅 코드인 경우가 일반적이다.

1: class Base64 {
2: public void otherMethod() { … }
3: }

 

라. 진단방법

J2EE를 제외하고 디버그 코드를 정적도구만으로 판단하기는 쉽지 않다.

개발 중 테스트 목적으로 남아 있는 디버그 코드가 존재하는지 확인한다(①). J2EE 환경(J2EE Standard)에서는 main 메소드 작성을 금하고 있으며, 일반적으로 개발자들은 디버그 코드를 main 으로 작성하므로 main 메소드가 사용되는 경우 디버그코드 인지 확인하여야 한다

1: public class U489 extends HttpServlet {
2: protected void doGet(HttpServletRequest request, … ) throws … { … }
3: protected void doPost(HttpServletRequest request, … ) throws … { … }
4: // 테스트를 위한 main()함수나 디버깅용 로그 출력문 등이 남아 있다.
5: public static void main(String args[]) { ①
6: System.err.printf(“Print debug code”);
7: }
8: …

 

- 정탐코드의 예 -

J2EE와 같은 응용프로그램에서 디버깅용으로 사용되는 main() 메소드는 삭제한다.

1: public class U489 extends HttpServlet {
2: protected void doGet(HttpServletRequest request, …) throws …{ …}
3: protected void doPost(HttpServletRequest request, …) throws …{ …}
4: // 테스트를 위한 main()함수나 디버깅용 로그 출력문 등이 남아 있다.
5: public static void main(String args[]) {
6: System.err.printf(“Print debug code”);
7: }
8: }

 

728x90
반응형