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

소스코드 보안약점 진단 - 시스템 데이터 정보노출

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

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

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

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

 

제 6절 캡슐화

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


3. 시스템 데이터 정보노출

가. 개요

시스템, 관리자, DB정보 등 시스템의 내부 데이터가 공개되면, 공격자에게 또 다른 공격의 빌미를 제공하게 된다.

나. 보안대책

일부 개발자의 경우 예외상황이 발생할 경우 시스템 메시지 등의 정보를 화면에 출력하도록 하는 경우가 많다. 예외상황이 발생할 때 시스템의 내부 정보가 화면에 출력되지 않도록 개발한다.

다. 코드예제

예외 발생시 getMessage()를 이용한 오류메시지를 통해 오류와 관련된 시스템 정보 등 민감한 정보 가 유출될 수 있다.

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

1: catch (IOException e) {
2: //오류 발생시 화면에 출력된 시스템 정보를 통해 다른 공격의 빌미를 제공 한다.
3: System.err.print(e.getMessage());
4: }

 

- 안전한 코드의 예 JAVA -

가급적이면 공격의 빌미가 될 수 있는 오류와 관련된 상세한 정보는 사용자에게 노출되지 않도록 최소한의 정보만을 제공한다.

1: catch (IOException e) {
2: //오류와 관련된 최소한의 정보만을 제공하도록한다.
3: logger.error("IOException Occured");
4: }

 

라. 진단방법

시스템 정보 출력 코드가 존재하는지 확인한다.

1: …
2: public void f() {
3: try {
4: g();
5: } catch (IOException e) {
6: // 예외 발생시 printf(e.getMessage())를 통해 오류 메시지 정보가 유출된다.
7: System.err.printf(e.getMessage());
8: }
9: }
10: private void g() throws IOException { … }
11: …

 

- 정탐코드의 예 -

다음의 예제와 같이 예외 정보에 대해 printStackTrace()등의 함수를 이용해 시스템 내부 데이터나 디버깅 정보를 공개하면 취약한 것으로 판단한다.

1: package com.product.dictionary.action;
2: import java.util.Date;
3: import javax.servlet.http.HttpServletRequest;
4: ….
5: public class GetAction extends BaseAction {
6: private TnFatCmTobeListDao tnFatCmTobeListDao;
7: public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServ- letRequest request, HttpServletResponse response) throws Exception 
{
8: ActionForward forward = null;
9: try {
10: UserVO userVo = getUserInfo(request);
11: ………..
12: WikinmspaceGetNameManager nameSpaceMgr = new WikinmspaceGetNameMa13: nager(); 
nameSpaceMgr.setWikiNmspceId(mgr.getWikidocVO().getWikiNameSpaceId(
));
14: nameSpaceMgr.execute();
15: } catch(Exception e) {
16: e.printStackTrace();
17: throw new sysException(“iKEP.Message.Error.Common.general”, e);
18: }

 

728x90
반응형