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

소스코드 보안약점 진단 - 잘못된 세션에 의한 데이터 정보노출

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

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

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

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

 

제 6절 캡슐화

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


1. 적절한 인증 없는 중요기능 허용

가. 개요

다중 스레드 환경에서는 싱글톤(Singleton)1) 객체 필드에 경쟁조건(Race Condition) 발생할 수 있다. 따라서, 다중 스레드 환경인 Java의 서블릿(Servlet) 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여, 서로 다른 세션에서 데이터를 공유하지 않도록 해야 한다.

나. 보안대책

싱글톤 패턴을 사용하는 경우, 변수 범위(Scope)에 주의를 기울여야 한다. 특히 Java에서는 HttpServ -let 클래스의 하위클래스에서 멤버 필드를 선언하지 않도록 하고, 필요한 경우 지역 변수를 선언하여 사용한다.

다. 코드예제

JSP 선언부에 선언한 변수는 해당 JSP에 접근하는 모든 사용자에게 공유된다. 먼저 호출한 사용자가 값을 설정하고 사용하기 전에 다른 사용자의 호출이 발생하게 되면, 뒤에 호출한 사용자가 설정한 값 이 모든 사용자에게 적용되게 된다.

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

1: <%@page import="javax.xml.namespace.*"%>
2: <%@page import="gov.mogaha.ntis.web.frs.gis.cmm.util.*" %>
3: <%!
4: // JSP에서 String 필드들이 멤버 변수로 선언됨
5: String username = "/";
6: String imagePath = commonPath + "img/";
7: String imagePath_gis = imagePath + "gis/cmm/btn/";
8: ……
9: %>

 

- 안전한 코드의 예 JAVA -

JSP의 서블릿(<% 소스코드 %>)에 정의한 변수는 _jspService 메소드의 지역변수로 선언되므로 공유가 발생하지 않아 안전하다.

1: <%@page import="javax.xml.namespace.*"%>
2: <%@page import="gov.mogaha.ntis.web.frs.gis.cmm.util.*" %>
3: <%
4: // JSP에서 String 필드들이 로컬 변수로 선언됨
5: String commonPath = "/";
6: String imagePath = commonPath + "img/";
7: String imagePath_gis = imagePath + "gis/cmm/btn/";
8: ……
9: %>

 

라. 진단방법

HttpServlet의 하위클래스에 멤버필드가 선언되어 있고 final이 아닌 경우는 취약한 것으로 판단한다.

1: public class U488 extends HttpServlet
2: {
3: private String name;
4: protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
5: {
6: name = request.getParameter(“name”);
7: …
8: out.println(name + “, thanks for visiting!”);
9: }
10: }

 

- 정탐코드의 예 -

서블릿(JSP 포함)에서 상수로 사용하지 않는 멤버 변수를 사용하면 취약하다

1: <%@ page import=”javax.xml.namespace.*” %>
2: <%@ page import=”maha.ns.web.fta.gaa.comm.util.*” %>
3: <%@ page import=”maha.ns.web.fta.gaa.comm.util.SSOSessionUtil”%>
4: <%!
5: String commonPath = “/”;
6: String imagePath= commonPath +”img/”;
7: String imagePath_gis = imagePath +”gis/cmm/btn/”;

 

- 오탐코드의 예 -

다음의 예제에서는 클라이언트 측에서 인증을 수행 하고 있어 우회가 가능하므로 취약하다고 판정 한다

1: <%@ page import=”java.util.*” %>
2: <%@ page import=”maha.ns.comm.util.StringUtil” %>
3: <%@ page import=”maha.ns.comm.util.Page” %>
4: <%@ taglib uri=”comm.tld” prefix=”comm” %>
5: <%!
6: final String imagePath = “/img/”;
7: String treeImagePath = imagePath+”/port/tree.gif”;
8: %>

 

728x90
반응형