소스코드 보안약점 진단 // 소프트웨어 보안약점 진단 // 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: }
'보안 공부 > 소스코드 보안약점 진단' 카테고리의 다른 글
소스코드 보안약점 진단 - 부적절한 예외 처리 (0) | 2022.01.28 |
---|---|
소스코드 보안약점 진단 - 오류 상황 대응 부재 (0) | 2022.01.27 |
소스코드 보안약점 진단 - 종료되지 않는 반복문 또는 재귀함수 (0) | 2022.01.25 |
소스코드 보안약점 진단 - 경쟁조건: 검사 시점과 사용 시점(TOCTOU) (0) | 2022.01.24 |
소스코드 보안약점 진단 - 반복된 인증시도 제한 기능 부재 (0) | 2022.01.21 |