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

소스코드 보안약점 진단 - 오류 메시지를 통한 정보노출

H.J.World 2022. 1. 26. 10:10
728x90
반응형

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

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

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

 

제 4절 보안기능

에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요정보(시스템 내부정보 등)가 포함될 때, 발생할 수 있는 취약점으로 에러를 부적절하게 처리하여 발생하는 보안약점이다.


1. 오류 메시지를 통한 정보노출

가. 개요

응용프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 외부에 제공하는 경우, 공격자의 악성 행위를 도울 수 있다. 예외발생시 예외이름이나 스택 트레이스를 출력하는 경우, 프로그램 내부구조를 쉽게 파악할 수 있기 때문이다.

나. 보안대책

오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함하도록 한다. 소스코드에서 예외상황 은 내부적으로 처리하고 사용자에게 민감한 정보를 포함하는 오류를 출력하지 않도록 미리 정의된 메시지를 제공하도록 설정한다.

다. 코드예제

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

1: try {
2: rd = new BufferedReader(new FileReader(new File(filename)));
3: } catch(IOException e) {
// 에러 메시지를 통해 스택 정보가 노출됨
4: e.printStackTrace();
5: }

 

- 안전한 코드의 예 JAVA -

아래 코드와 같이 예외 이름이나 오류추적 정보를 출력하지 않도록 한다.

1: try {
2: rd = new BufferedReader(new FileReader(new File(filename)));
3: } catch(IOException e) {
// 에러 코드와 정보를 별도로 정의하고 최소 정보만 로깅
4: logger.error("ERROR-01: 파일 열기 에러");
5: }

 

라. 진단방법

해당 취약점에서 시스템 환경, 유저정보, 민감한 정보 등에 대한 기준을 정적도구가 판단하기 어려움에 따라 진단원이 출력함수 등을 통하여 외부에 출력되는 값 중 민감한 정보 등을 판단할 필요가 있다. 오류메시지를 출력하는 경우(①) 해당오류에 시스템 환경, 유저정보, 데이터 등 민감한 정보가 포함 되어 있는지 확인한다.

1: public static void main(String[] args) {
2: String urlString = args[0];
3: try {
4: URL url = new URL(urlString);
5: URLConnection cmx =
6: url.openConnection();
7: cmx.connect();
8: } catch (Exception e) {
9: e.printStackTrace();-----------------------------------①
10: }
11: }

 

- 정탐코드의 예 -

오류 메시지를 통해 환경, 사용자, 관련 데이터 등의 내부 정보가 유출될 경우 취약하다.

1: <%@ page language=”java” contentType=”text/html; charset=UTF-8” buffer=”-
2: none”%>
3: <%@page import=”egovframework.com.utl.fda.ucc.service.EgovUnitCalcUtil” %>
4: <%
5: String sCmd = request.getParameter(“cmd”) == null ? “” : (String) 
request.getParam6: eter(“cmd”);
7: double nResult=0.0;
8: try {
9: if(!sCmd.equals(“”)) {
10: EgovUnitCalcUtil egovUnitCalcUtil= new EgovUnitCalcUtil();
11: ….
12: }
13: ……
14: }
15: } catch(Exception e) {
16: e.printStackTrace();
17: }
18: %>

 

- 오탐코드의 예 -

오류 메시지를 통해 환경, 사용자, 관련 데이터 등의 내부 정보가 유출될 경우 취약하다.

1: BufferedReader br = null;
2: try {
3: br = new BufferedReader(new InputStreamReader(new FileInputStream(file), “UTF8”));
4: String line = null;
5: while ((line = br.readLine()) != null) {
6: // …
7: }
8: } catch (IOException e) {
9: logger.error(e, e);
10: } finally {
11: if (br != null) {
12: try {
13: br.close();
14: } catch (IOException e) {
15: logger.error(e, e);
16: }
17: }
18: }

 

728x90
반응형