Chapter 07 소스코드의 취약점 분석.

Slides:



Advertisements
Similar presentations
Transaction ㅇ Transaction 을 직접 구현하려면, 까다로운 설계와 복잡한 코드를 필요로 하고 수정에 공수가 많이 들게 된다. ㅇ 스프링에서 제공하는 Transaction Manager 를 사용하여 쉽고 간편하게 어려운 트랜잭션을 해결할 수 있다. xml.
Advertisements

All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
DB Injection과 대응방안 nwkim.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
Network Socket Programming java.net.Socket java.net.ServerSocket
DB 프로그래밍 학기.
DB 프로그래밍 학기.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
김 상 국, 김 기 훈 한남대학교 컴퓨터공학과 데이터베이스 실험실
AJAX 기본중의 기본 xmlhttprequest
문서 PARSONS/OJA 문서, 워크시트, 데이터베이스 Page 1 1.
소프트웨어시스템설계(6주) 데이터베이스 연동
Programming for the java Virtual machine
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
C#에서 데이터베이스 연동 방법.
JSP BBS (Bulletin Board System)
Section IV. 웹 취약점 분석도구의 활용
JSP Programming with a Workbook
어서와 Java는 처음이지! 제19장 데이터베이스 프로그래밍.
Chapter 05 SQL 인젝션 공격.
JDBC 프로그래밍 이수지 이동주 1.
5 익셉션 처리.
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
Chapter 04. 웹 보안 : 웹, 그 무한한 가능성과 함께 성장한 해킹
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
객체 지향 원리 송치형.
8장 자바 입출력.
4 쿠키와 세션.
IOC, DI 2015 Web Service Computing.
Department of Computer Software MyongJi University
XML WEB SERVICE PDA WEB HARD
구글해킹과 SQL인젝션 지창훈, 최연우.
중 간 고 사 (웹프로그래밍)
AOP 개념 및 Spring의 AOP 기능.
10장 SafeTalk 시스템 소프트웨어 연구실 성순화 이재일
인터넷 보안 정보 보안 개론 5장.
DataScience Lab. 박사과정 김희찬 (월)
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
주소록 프로그램.
2012 인터넷 응용프로그래밍 FTP, MySQL 사용 방법 및 텀 프로젝트용 서버에서 웹페이지 구동 방법 설명
자바 5.0 프로그래밍.
Cookie 와 Session.
ㅇ 스프링 설정파일 (dispatcher-servlet.xml)
JDBC (Java Database Connectivity)
5장. JSP 페이지의 스크립트 요소 이 장에서 배울 내용 : JSP페이지를 구성하는 구성요소중 하나인 스크립트요소를 학습하는 장으로 JSP페이지의 스크립트의 3가지 요소인 선언문(Declaration), 스크립트릿(Scriptlet), 표현식(Expression)에 대해.
BLACK OUT 신개념 연합동아리 블랙아웃에서 1기를 모집합니다!
제주닷컴 매뉴얼 (실시간 예약시스템) 2013년 10월.
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
DataScience Lab. 박사과정 김희찬 (월)
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
JSP 게시판 구현.
Chapter 04 인증 기술과 접근 통제.
Database 중고차 매매 DB 비즈니스IT 윤동섭.
DataScience Lab. 박사과정 김희찬 (월)
자바 5.0 프로그래밍.
SQL INJECTION MADE BY 김 현중.
Spring Security 2015 Web Service Computing.
국가문화예술지원시스템 사용자 매뉴얼(1)
JSP 빈즈 1.JSP 빈즈? JSP와 연동을 위해 만들어진 컴포넌트 클래스를 말한다. JSP 빈즈는 컨테이너에 위치하며, 데이터 처리와 공용화된 기능을 제공하기 때문에 빈즈를 잘 활용하면 프로그램의 중복을 줄이고 좀더 원할한 유지보수가 가능한다. 물론 , 모든 JSP를.
자바 5.0 프로그래밍.
C# 10장. 참조형.
제안 제도 운영방안.
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
코 칭 결 과 센 터 구성센터 (모바일) 코칭대상 프로 (엔지니어) 코칭일시
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
Presentation transcript:

Chapter 07 소스코드의 취약점 분석

01 소스코드의 취약점 02 소스코드의 취약점 분석 방법 03 프로그래밍 언어별 주요 취약점

소스코드의 취약점 분석 접근 방식을 학습한다. 소스코드의 취약점 유형을 학습한다. 프로그래밍 언어별 주요 취약점 패턴 및 함수 종류를 학습한다.

1.1 웹 애플리케이션의 보안 취약점 찾기 ‘Black Box Testing’ 방식 소스코드를 보지 않고 웹 애플리케이션의 외부 인터페이스나 구조를 분석하여 취약점을 발견 White Box Testing에 비해 취약점을 찾는 속도가 빠르며 다양한 취약점 찾기 시도 가능 인터페이스 간의 상관관계를 분석하여 취약점이 발생하는 부분 식별 가능

1.1 웹 애플리케이션의 보안 취약점 찾기 ‘ White Box Testing’ 방식 ‘Gray Box Testing’ 방식 개발된 소스코드를 살펴봄으로써 코딩의 취약점을 찾는 것 내부 소스코드를 볼 수 있기 때문에 보안 취약점의 존재 유무를 좀 더 확실히 알 수 있으나 시간이 오래 소요됨. ‘Gray Box Testing’ 방식 Black Box Testing과 White Box Testing의 장점을 혼합 외부에서 보이는 취약점을 웹 애플리케이션 보안 진단을 통해 확인하고, 소스 코드에서 접근 통제, 입력값 검증, 세션 처리 문제 등을 같이 살펴보면서 취약 점을 조사하는 방식

1.2 소스코드의 취약점 유형

2.1 입력값 검증 취약점 입력값 검증 취약점 대표적인 예로는 SQL 인젝션, 크로스 사이트 스크립팅, 위험한 형식의 파일 업 로드, 디렉터리 경로 조작 등이 있음.

2.1 입력값 검증 취약점 LoginSqlInjection.java 파일 확인 C:\[WebGoat 설치 디렉터리]\extract\webapps\WebGoat\plugin_ extracted\org\owasp\webgoat\plugin\sqlinjection\LoginSqlInjection.java

2.1 입력값 검증 취약점 LoginSqlInjection.java 파일 확인 public boolean login(WebSession s, String userId, String password) { // System.out.println("Logging in to lesson"); boolean authenticated = false; try String query = "SELECT * FROM employee WHERE userid = " + userId + " and password = '" + password + “’”; // System.out.println("Query:" + query); Statement answer_statement = WebSession.getConnection(s) .createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet answer_results = answer_statement.executeQuery(query);

2.1 입력값 검증 취약점 입력값 검증 미비의 문제점 확인 문제가 되는 핵심 코드의 실행 과정 사용자가 입력한 아이디와 패스워드는 userId와 password 변숫값으로 저장된다. userId와 password 변숫값을 포함하여 SELECT 문장을 만든다. 완성된 SELECT 문장을 executeQuery 함수를 통해 실행한다. 공격자가 아이디, 패스워드에 admin, ‘or’‘=’를 입력하면 만들어지는 쿼리문 → SQL 인젝션 취약점의 검증을 위해 소스코드를 분석할 때는 SELECT문과 같은 데이터베이스 쿼리문을 검색하고, 필터링 규칙이 포함되어 있는지 살펴봐야 함. SELECT * FROM employee WHERE userid = 'admin' and password = ''or''=''

2.1 입력값 검증 취약점 StoredXss.java 파일 확인 C:\[WebGoat 설치 디렉터리]\extract\webapps\WebGoat\plugin_extracted \org\owasp\ webgoat\plugin\StoredXss.java

2.1 입력값 검증 취약점 StoredXss.java 파일 확인 protected void addMessage(WebSession s) { try String title = HtmlEncoder.encode(s.getParser( ).getRawParameter(TITLE, "")); String message = s.getParser( ).getRawParameter(MESSAGE, ""); ⋮ statement.setString(2, title); statement.setString(3, message);

2.1 입력값 검증 취약점 입력값 검증 미비의 문제점 확인 문제가 되는 핵심 코드의 실행 과정 사용자가 입력한 title과 message 변수를 getRawParameter 함수를 통해 받아들인다. 해당 변수를 필터링 없이 데이터베이스 쿼리문에 포함하여 저장한다. → 사용자가 입력하는 값을 getRawParameter 함수를 통해 받아들이며, 이후 추 가적인 필터링 기능이 없는 것 확인

2.1 입력값 검증 취약점 MaliciousFileExecution.java 파일 확인 C:\[WebGoat 설치 디렉터리]\extract\webapps\WebGoat\plugin_extracted \org\owasp\webgoat\plugin\MaliciousFileExecution.java

2.1 입력값 검증 취약점 MaliciousFileExecution.java 파일 확인 File userfile = new File(uploads_and_target_parent_directory + TARGET_RELATIVE_PATH + java.io.File.separator + s.getUserName() + ".txt"); String image_query = "SELECT image_relative_url FROM mfe_images WHERE user_name = '" + s.getUserName() + "'"; Statement image_statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet image_results = image_statement.executeQuery(image_query);

2.1 입력값 검증 취약점 위험한 형식의 파일 업로드에 대한 입력값 검증 미비의 문제점 확인 getUserName으로 파일명을 가져와서 처리할 때 파일명 및 확장자에 대한 필 터링이 없는 것 확인 → 웹 애플리케이션의 파일을 업로드하는 부분에서 파일 확장자를 검사하는지 살펴볼 필요가 있음.

2.1 입력값 검증 취약점 디렉터리 경로 조작 파일명을 받아서 처리하는 부분에 파일명에 대한 필터링이 없으면 공격자는 디 렉터리 경로를 조작하여 상위 디렉터리에 있는 임의의 파일에 접근할 수 있음. → 파일명을 받는 file 변수나 getRawParameter 변수를 통해 필터링하고 있는지 확인

2.2 세션 처리 및 접근 통제 취약점 매개변수 조작 URL에서 변수 또는 POST 형태로 전송되는 매개변숫값을 조작하여 자신이 소 유한 것 외의 권한을 획득하는 공격 기법 매개변수 조작 취약점이 존재하는지 확인하려면 사용자 권한이 필요한 페이지 에 접근할 때 세션 처리를 하는 코드를 포함하는지 확인 예) 사용자가 입력한 매개변숫값을 받아들여 쿠키로 저장하고 그 쿠키 값으로 인증하는 경우

2.2 세션 처리 및 접근 통제 취약점 쿠키 조작 브라우저의 쿠키 값을 통해 사용자 권한을 부여하는 코드 쿠키 값은 쉽게 조작할 수 있기 때문에 쿠키 값으로 인증하는 코드는 안전하 지 않음. → 매개변수와 쿠키 조작 취약점 관련 소스코드를 살펴보려면 getCookie와 같이 쿠키를 입력받아 처리하는 부분이 있는지 확인 Cookie[] = cookies = request.getCookies(); for(int i = 0; i < cookies.length; i + +) { Cookie c = cookies[i]; if(c.getName().equals("role")) { userRole = c.getValue(); }

2.2 세션 처리 및 접근 통제 취약점 강제 브라우징 권한이 필요한 페이지에 권한 체크 코드가 누락되었을 때 발생 /admin/과 같은 관리자 디렉터리 내에 있는 소스코드 중에 세션 처리 등의 코 드가 존재하는지 확인해봄으로써 강제 브라우징 취약점이 존재하는 페이지를 찾을 수 있음. → 관리자 페이지 및 인증이 필요한 페이지에 세션 처리 코드가 포함되어 있는 지 확인

2.3 코드 내 중요 정보 노출 취약점 중요 정보 평문 전송 중요 정보 평문 전송 취약점을 확인하는 방법 패스워드나 주민등록번호와 같은 민감한 내용을 암호화하지않고 평문으로 전 송할 때 발생하는 취약점 중요 정보 평문 전송 취약점을 확인하는 방법 사용자의 중요 정보를 전송하는 페이지가 HTTPS(SSL) 등의 암호화된 채널로 통신하는지 확인 소스코드 내에서 중요한 정보를 암호화 함수를 통해 전송하는지 확인

2.3 코드 내 중요 정보 노출 취약점 행정안전부 소프트웨어 개발 보안 가이드 예제 네트워크상에서 Socket 함수로 데이터를 전송할 때 암호화를 하지 않는다면 공격자가 스니핑을 통해 패스워드를 얻을 수 있음. void foo( ) { try Socket socket = new Socket("transit", 4444); PrintWriter out = new PrintWriter(socket.getOutputStream( ), true); String password = getPassword( ); out.write(password) } catch (FileNotFoundException e) ⋮

2.3 코드 내 중요 정보 노출 취약점 암호화 함수를 이용한 전송 소스코드 또는 중요 정보를 암호화하더라도 복호화 함수나 복호화 키가 쉽게 노출된다면 암호화된 정보가 공격자에 의해 악용될 수 있음.

2.3 코드 내 중요 정보 노출 취약점 하드 코딩된 패스워드 하드 코딩(hard coding) : 패스워드 및 시스템 접속 정보와 같은 민감한 정보가 소스코드 내에 그대로 노출되어 있는 경우 공격자가 소스코드를 외부에서 열람할 경우 심각한 2차 공격에 악용될 수 있음. 데이터베이스 접속 정보 중 패스워드(anesra)를 하드 코딩한 예 public Connection DBConnect(String url, String id) { try conn = DriverManager.getConnection(url, id, "anesra"); } catch (SQLException e) System.err.println("..."); return conn;

2.3 코드 내 중요 정보 노출 취약점 주석 처리된 중요 정보 주석에는 해당 소스코드가 어떤 기능을 하는지 설명하는 내용이 많은데, 간혹 개발 단계에서 수정이 발생한 소스코드를 삭제하지 않고 주석 처리를 하는 경 우가 있음. → 언어별 주석 처리를 하는 코드만 발췌하여 해당 코드 내에 패스워드 또는 데 이터베이스 접속 정보 등 민감한 내용이 포함되어 있는지 확인

3.1 자바 입력값 처리 함수

3.1 자바 사용자 세션 처리 함수 그 외에 살펴볼 함수

3.2 ASP.NET 입력값 처리 함수

3.2 ASP.NET 사용자 세션 처리 함수 그 외에 살펴볼 함수