최근 지속적으로 발생되고 있는 웹 해킹 관련 침해사고에 대한 대안으로 시큐어코딩(Secure Coding)이 강조되고 있다. 시큐어코딩이란 개발 단계에서부터 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하여 외부 공격으로부터 안전한 어플리케이션을 개발하는 것을 말한다. 지난 201212월부터는 행정자치부의 정보시스템 구축 운영 지침 개정안 행정 예고에 따른 시큐어코딩 의무화 법안이 발표되었다. 하지만 이와 같은 법안이 나왔음에도 불구하고 침해 사고는 좀처럼 줄어들지 않는 것이 현실이다.


개발자 입장에서도 마찬가지로 보안 취약점(hole)의 존재를 찾아 보완하는 일이 쉽지는 않을 것이다. 개발 단계에서부터 시큐어코딩을 하였더라도 문자열 필터링 우회 기법, 인코딩 또는 암호화를 통한 공격 기법들은 점차 진화하고 있으므로 이를 안심할 수 없다.


이와 같은 문제의 해결을 돕기 위해 나온 도구가 몇가지 존재한다. 이번에 소개할 도구는 소스코드 진단 도구 ‘Yasca’이다. ‘Yasca’ 2007년도 ‘Michael Scovetta’라는 개발자에 의해 개발되었으며, 이 도구는 개발자가 애플리케이션을 올바르게 제작할 수 있도록 소스코드에 대한 보안 취약점 및 품질 향상에 도움을 줄 수 있는 오픈 소스 도구이다. 시큐어코딩과 관련된 다양한 플러그인을 지원하며, 확장성이 뛰어나 개발자들이 선호하는 도구 중 하나이다.

[그림 1] Source Code Analysis Tool - Yasca


공식 홈페이지

http://www.scovetta.com/yasca.html

다운로드 URL

https://sourceforge.net/projects/yasca

http://scovetta.github.io/yasca/ (최신)

[1] Yasca 공식 홈페이지 및 다운로드 URL

 

아래 [1]‘Yasca’ 사용을 위한 시스템 권고 사양이다. 유료 상용 도구에 비해 사양이 높지 않은 편이지만, 플러그인 옵션을 많이 적용할 시에는 상당한 자원과 시간이 요구될 수 있다.

운영체제

Microsoft Windows 2000 or Later

어플리케이션

Java JRE(or JDK) v 1.4 Later (required for PMD)

하드웨어

At least 512MB RAM (1 + GB suggested)

[2] Yasca 환경 시스템 권고 사양


‘Yasca’는 기본적으로 소스파일을 하나씩 분석하지만, ‘resource’ 옵션을 추가해 연관성을 가진 소스파일들을 한꺼번에 분석할 수 있다. 이외에도 옵션을 사용하여 디버깅 기능, 보고서 형식 변경, 스캔 수준 설정, 진단 제외 파일 지정 등의 기능을 사용할 수 있다. 이와 같은 옵션에 대한 설명은 아래 [3]에서 확인할 수 있다.

옵션

설명

--debug

디버깅 기능 추가

-d “QUERYSTRING”

Yasca의 하위 구성 요소에 쿼리 문자열을 전달

--help

도움말 페이지 보기

-i –ignore-ext EXT,EXT

추가된 파일확장자는 진단할 시에 제외

-i –ignore-file FILE

추가된 파일은 진단할 시에 제외, 지정된 xml파일로부터 파일명에 해당되는 것은 제외하고 결과를 출력

-i, --source-required

가능한 소스코드 결과들만 보여줌

-f, --fixes FILE

사용될 파일만 선택함

-l –level LEVEL

소스코드 스캔 수준 레벨 (1-5이며, 기본은 5로 설정)

-o –output FILE

디렉토리 위치 설정 및 보고서 작성

(기본 설정은 특정 파일로 Yasca 설치 디렉토리에 생성)

-p, --plugin DIR|FILE

플러그인 디렉토리 및 파일 설정

-px PATTERN [PATTERN]

플러그인 패턴추가, “PATTERN,PATTERN”과 같이 쉼표로 구분

--log FILE

로그 파일 생성

-sa, --sa_home DIR

서드 파트 플러그인들을 위한 디렉토리 지정

-r, --report REPORT

보고서 템플릿 설정 (기본은 HTMLGroupReport)

HTMLGroupReport, CSVReport, XMLReport, SQLReport, DetaildReport, ConsoleReport 형태 지원

-s, --silent

어떤 결과도 출력하지 않음

-v, --version

버전 정보 보기

[3] Yasca 주요 옵션 및 설명


‘Yasca’는 독립적으로 실행되는 플러그인들을 추가하여 그 기능을 사용할 수 있다. 사용자가 필요한 플러그인을 여러 개 추가할 수도 있지만, 스캔과 결과 노출의 시간이 비교적 많이 소비된다. ‘Yasca’를 실행할 때 추가하여 사용할 수 있는 플러그인 목록은 아래 [3]과 같다.

 

플러그인

기능

findBugs

CLASS, JAR 소스코드 검사

PMD

JSP 소스코드 검사

JLint

JAVA 소스코드 검사

Antic

C/C++ 소스코드 검사

Javascript Lint

Javascript 소스코드 검사

PHPLint

PHP4, PHP5 소스코드 검사

Cppcheck

C, C++ 소스코드 검사

Clam AV

악의적인 파일 검사

Lint4j

JAVA, CLASS 소스코드 검사

Grep

분석할 파일의 간단한 패턴을 검사

[4] Yasca 플러그인 및 설명


‘Yasca’는 사용자의 운영체제에 따라 윈도우 환경은 배치 파일(.bat), 리눅스 환경은 쉘 스크립트(.sh) 파일을 실행해야 한다. 본 테스트는 윈도우 환경에서 진행하였으며, ‘php’ 언어 기반으로 작성된 소스코드를 분석하였다. ‘Yasca’는 명령프롬프트 창(cmd)을 열어 ‘Yasca’ 디렉토리로 이동한 뒤 ‘yasca.bat’ 또는 ‘yasca’를 입력하여 실행할 수 있다. 이를 실행할 때 옵션이 존재하지 않을 경우 각 옵션에 대한 목록과 도움말, 실행 예문(Example) 등이 아래 [그림 2]와 같이 나타나게 된다.

사용 명령어

> yasca.bat

[그림 2] Yasca 도움말 및 실행 예문

 

 

본 테스트에서는 단일 소스파일 분석이 아닌 ‘resource’ 옵션을 이용하여 일괄적으로 소스파일 분석을 진행하였다. 소스파일 분석을 시작하게 되면 아래 [그림 3]과 같이 사용중인 ‘Yasca’ 버전과 스캔 경로가 나타나며, 스캔이 완료된 파일의 개수를 확인할 수 있다. 분석(Scan)이 완료되면 ‘Scan complete’ 문구가 나타난다.

사용 명령어

> yasca.bat resource C:\APM_Setup\htdocs

[그림 3] Yasca 소스코드 분석


스캔이 완료된 경우 ‘Yasca’ 디렉토리에 HTML 문서 형식으로 결과 파일이 생성되며, 해당 파일을 열어 결과를 확인할 수 있다. 주의해야 할 점은 스캔의 양이 과도하게 많을 경우 결과 파일에서 결과를 불러오는데 많은 시간이 소비되며, 비정상적으로 결과가 나타나는 경우가 발생할 수 있다. 아래 [그림 4]‘Yasca’ 디렉토리에 생성된 결과 파일과 해당 파일을 실행 시킨 후 결과를 불러오는 모습이다.

[그림 4] Yasca 소스코드 분석 결과 로드


결과 파일 문서에서 결과 로드(Load)가 완료되면 아래 [그림 5]와 같은 모습이 나타난다. 결과는 위험도(Severity), 플러그인(Plugin), 분류(Category), 설명(Message), 상세내용(Details)으로 분류되어 나타난다.

 

상세 내용(Details)에서는 소스 파일의 경로와 발견 취약점이 몇 번째 줄에 위치하는지를 확인할 수 있고, 해당 소스 파일의 전체 소스코드와 취약점에 대한 설명.을 확인할 수 있다. 개발자의 경우 이처럼 간단한 스캔 과정을 거쳐 작성된 소스 코드에 취약점이 존재하는지 확인할 수 있다. 또한 사용자의 필요에 따라 플러그인을 추가해 소스 코드의 취약 여부를 파악할 수 있고, 공격이 발생될 수 있는 소스코드 보안 결함에 대한 시큐어코딩으로 소스 코드를 보완할 수 있다.

[그림 5] Yasca 소스코드 분석 결과 상세보기

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

일반적으로 모의 침투 테스터 또는 국내외 대부분의 해커들은 해킹 프레임워크 첫 단계로 정보 수집 단계를 거치며, 정보 수집 단계가 가장 중요한 단계라고 말한다. 정보 수집 단계에서 많은 정보가 수집 될수록 해킹 프레임워크에서 중요한 ‘Key’로 작용되기 때문이다.

정보 싸움이라 불리는 사이버전에서 아무런 정보 없이 침투를 시도한다는 것은 그야말로 맨 땅에 헤딩하는 격과 같다. 대상 정보가 불충분한 상태에서 무작위 대입과 같은 공격을 무리하게 시도한다면 불필요한 흔적을 남겨 뒷덜미가 잡히게 될 것이다.

이러한 정보 수집은 검색 엔진 API 활용, DNS 조회, 응답 패킷 분석, Wordlist 대입, 소스코드 분석 등 여러가지 다양한 방법을 통해 이루어질 수 있다. 이토록 다양한 방법의 정보 수집을 자동화하여 사용자가 필요한 결과 값을 얻을 수 있는 편리한 도구들이 존재한다. 이번에 소개할 도구는 사용자가 필요한 모듈을 로드(Load)하여 대상에 대한 여러가지 정보를 한 눈에 볼 수 있는 정보 수집 도구 ‘Recon-ng’.


[그림 1] Information Gathering Recon-ng Tool

다운로드 URL (https://github.com/open-security/recon-ng)

‘Recon-ng’Black Hills 사의 Tim Tomes 개발자에 의해 제작되었으며, 개발에 사용된 언어는 ‘Python’이다. ‘Recon-ng’는 독립된 모듈을 로드(Load)하여 사용자가 필요한 정보를 얻을 수 있으며, 필요 모듈은 위 다운로드 URL 링크 ‘modules’ 경로에서 다운로드 받을 수 있다. 해당 도구의 모듈은 독립적으로 실행되는 장점을 가지며, 오픈소스 기반의 도구이므로 여러 개발자들에 의해 업데이트가 진행되고 있다. 또한 ‘Recon-ng’ 프레임워크는 ‘Metasploit-Framework’와 비슷한 구조를 가졌지만, 웹 서비스를 정찰(Reconnaissance)하는 용도로 사용되는 점에서 차이점을 갖는다.

 

아래[1]‘Recon-ng’에서 사용되는 모듈과 그에 대한 간략한 설명이다.

모듈

설명

Discovery

웹 서비스 상에 공개된 정보에 의해서 필요 정보 수집

(cache, php_info, robots, server_status )

Exploitation

SQL 쿼리문, Script, Xpath 등의 구문을 입력하여 공격 가능 벡터 수집

Import

CSV 파일, list 파일 등을 import 하여 결과 값 확인 가능

Recon

Search Engine API, Wordlist, SNS, Domain, Dump, Geocode, ssl, vpn, netcraft, Brute-Force 등 다양한 방법을 통해 공개된 연락처, 인증 크레딧, 호스트 정보 등의 정보 수집

Reporting

각 모듈을 사용하여 수집된 정보를 사용자가 쉽게 파악할 수 있도록 문서화

[1] Recon-ng 모듈 설명

이와 같은 여러가지 모듈 중 사용자가 필요한 모듈을 로드하여 사용할 수 있다. 본 테스트는 칼리 리눅스(Kali-Linux)에서 진행되었으며, ‘Recon-ng’는 칼리 리눅스에 내장되어 있는 도구 중 하나이므로 해당 OS를 사용한다면 별도의 다운로드 및 설치 과정없이 도구를 사용할 수 있다. 칼리 리눅스 환경이 아닌 다른 환경에서 ‘Recon-ng’ 사용을 원할 경우 [그림 1] 아래 작성된 다운로드 URL을 통해 다운로드 및 설치 후 사용이 가능하다. ‘Recon-ng’를 실행하게 되면 아래[그림 2]와 같이 배너, 버전 정보, 사용 가능한 모듈 수 등이 나타나게 된다.


[그림 2] Recon-ng 실행 모습

‘Recon-ng’의 모듈은 독립적으로 실행되기 때문에 사용자의 필요에 따라 별도의 모듈을 추가할 수 있다. 현재 사용 가능한 모듈의 목록을 확인하기 위해선 ‘show modules’ 명령을 입력하여 아래[그림 3]와 같이 확인 할 수 있다.

 

 

[그림 3] 모듈 목록 확인

이와 같이 사용 가능한 모듈 목록을 확인하여 사용자가 필요한 모듈을 사용할 수 있다. 본 테스트에서는 [recon/domains-vulnerabilities] 경로에 위치한 ‘XSSPosed’ 모듈을 사용하였다. ‘XSSPosed’ 모듈은 다양한 치트 시트(Cheat Sheet)를 이용해 XSS(Cross Site Scripting) 공격 지점(Vector)을 찾는 모듈이다. 해당 모듈을 이용해 URL에 공격 구문을 삽입하여 Reflected XSS 방식의 공격 지점을 찾을 수 있다. 모듈을 추가하는 방법과 모듈에 적용할 옵션 정보 조회 방법은 아래[그림 4]와 같다.


[그림 4] ‘XSSPosed’ 모듈 로드 및 옵션 정보 조회

 

 

모듈을 로드한 뒤에 대상 지정 등의 옵션을 설정해야 한다. 이러한 구조는 ‘Metasploit’과 유사하지만, ‘Recon-ng’는 초기 접근을 시도하는 정보 수집 단계에서 사용하므로 대상만을 지정하여 모듈을 실행한다. 옵션에서 대상을 지정하는 방법은 아래[그림 5]와 같이 ‘set source’ 명령을 통해 정보 수집 대상을 지정할 수 있다. 대상 지정이 완료된 후 ‘show info’ 명령을 통해 설정된 옵션을 확인할 수 있다.


[그림 5] 옵션 대상 지정 및 정보 조회

대상 지정이 완료되면 ‘run’ 명령을 통해 모듈을 실행시킬 수 있다. 모듈이 실행되는 동안 유효한 공격 지점(Vector)을 찾으면 아래[그림 6]와 같이 ‘Example’에서 공격 구문이 포함된 정보를 확인할 수 있으며, 카테고리와 호스트 도메인, 게시일, 참조 URL, 상태 등의 정보를 확인할 수 있다.


[그림 6] ‘XSSPosed’ 모듈 실행 및 결과 조회

 

‘XSSPosed’ 모듈을 통해서 얻어낸 공격 구문 URL을 아래[그림 7]와 같이 브라우저에 직접 대입해 본 결과, Reflected XSS 취약점이 발견되었으며, 해당 취약점을 이용한 피싱, 페이지 리다이렉트 등의 직접적인 공격으로 이어질 수 있는 가능성을 확인할 수 있었다.


[그림 7] 공격 구문 URL 대입 및 응답 확인

이처럼 정보 수집 도구를 통해 대상 서비스의 취약점을 발견하거나, 대상에 대한 여러 정보를 수집하여 공격을 시도할 수 있다. 반대로 생각한다면 이와 같은 도구를 이용해 담당자는 현재 관리 중인 자산의 가용성이 침해되지 않는 선에서 공격을 시도해 본 후 발견된 보안 결함(Hole)에 대하여 선 조치를 취할 수 있다.

어느 서비스나 보안의 결함은 존재한다. 하지만 그 결함의 존재를 알고 위험을 수용하는 것과 그 존재를 모르고 서비스를 유지하는 것은 큰 차이를 가질 수 밖에 없다. 담당자의 입장에서는 관리 중인 자산에 대하여 관심을 기울여 보안 사고를 미연에 방지하는 것이 바람직하다.

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

Cuckoo Sandbox 기능

Cuckoo Sandbox의 구성 프로그램 설치와 환경 구축을 정상적으로 완료하였다면, Cuckoo Sandbox가 정상적으로 작동하는지에 대한 기능 테스트가 필요하다. 해당 테스트는 악성 코드에 대한 분석과 결과 값이 정상적으로 나타나는지에 대한 간단한 기능 테스트이며, 사전에 분석이 가능한 악성 파일 샘플을 준비하여 진행한다.

악성 파일 분석

본 테스트를 통해 Cuckoo Sandbox의 간단한 기능 소개가 이루어지며, 각 기능이 정상적으로 동작하는지에 대한 확인이 가능하다. 분석에서 사용될 악성 파일은 RAT(Remote Access Trojan) 도구의 Server 파일이며, 실행 시 해당 악성 파일을 빌드한 원격지 호스트의 좀비 PC가 되어 의도하지 않은 작업을 수행하는 등 원격 제어를 당하게 된다.

악성 파일을 업로드하여 분석을 진행하였으나 분석 결과가 정상적으로 나오지 않는 경우가 발생될 수 있다. 이러한 경우 실행 파일의 확장자를 확인하여 실행 가능한 응용 프로그램이 설치되어 있는지 또는 다른 오류로 인해 프로그램 실행이 불가능한지 직접 확인하여 오류를 체크한 뒤 분석을 진행한다.

악성 파일 업로드

-      파일 업로드 시 [Select] 버튼을 클릭하여 파일 탐색 창에서 대상 파일 선택

-      업로드 대상 파일을 선택하여 [열기(O)] 버튼으로 파일을 올리고 [Analyze] 버튼으로 분석 시작

[그림 1] 분석 대상 악성 파일 업로드

 

 

악성 파일 분석

-      정상적으로 파일을 업로드 하였다면, ‘Submission complete!’ 문구와 함께 작업상태 확인 가능

[그림 2] 악성 파일 업로드 및 분석

-      Cuckoo Sandbox가 실행 중인 호스트 PC에서 분석 로그를 확인할 수 있음


[그림 3] Cuckoo Sandbox 분석 로그

분석 결과 Report


분석을 정상적으로 완료하였다면 [Recent] 탭에서 MD5 해시 값의 링크를 클릭하여 분석 결과 Report를 확인할 수 있다. , [Recent] 목록에서 나타나는 결과 확인 대상의 상태(Status)reported로 표시되어 있어야한다. 분석 결과에서 나타나는 상태(Status) 표시는 reported(결과 정상), reported(결과 오류), completed(분석 완료), running(분석 중)으로 나뉘어진다.

[그림 4] Recent 분석 결과 목록

 

분석 결과 [Summary]

-   [Summary] 탭에서 분석 결과에 대한 요약 정보를 확인할 수 있음



[그림 5] [Summary] 메뉴


분석 결과 [Summary > Signatures]

-   해당 파일 Signature에 대한 분석 정보를 [Signatures] 탭에서 확인할 수 있음

[그림 6] [Summary > Signatures]


분석 결과 [Summary > Screenshots]

-   Guest PC에서 분석되는 동안에 캡처된 스크린 샷을 [Screenshots] 탭에서 확인할 수 있음

[그림 7] [Summary > Screenshots]

 

분석 결과 [Summary > Network]

-      발생된 패킷에 대한 요약 정보를 [Network] 탭에서 확인할 수 있음

-      해당
 탭에서 도메인, 응답 패킷, Host IP 등의 요약 정보 확인 가능



[그림 8] [Summary > Network]


분석 결과 [Summary > Summary]

-      분석 대상 파일의 기본 정보 이외에 레지스트리, 뮤텍스, 경로, 프로세스 등의 요약된 정보를 [Summary] 탭에서 확인할 수 있음

-      드롭퍼(Dropper) 등의 악성 파일에 의해 생성된 악성 파일의 정보 또한 확인할 수 있음

-      해당 탭의 요약 정보를 통해 비교 분석 또는 정적 분석 가능


[그림 9] [Summary > Summary]

 

 

분석 결과 [Static Analysis]

-     대상 파일의 포맷, 버전, 섹션, 리소스 등의 정보를 확인할 수 있으며 이를 통해 정적 분석이 가능함


[그림 10] [Static Analysis] 메뉴


분석 결과 [Behavioral Analysis]

-     분석 중 프로그램이 실행되고 있을 때 프로세스 상태와 시작 및 종료 시간, 로드된 ‘dll’, 리턴 값 등의 정보를 확인할 수 있으며, 이를 통해 동적 분석이 가능함

[그림 11] [Behavioral Analysis] 메뉴

 

 

분석 결과 [Network Analysis]

-      프로그램이 실행되면서 발생된 패킷에 대한 정보를 확인하여 네트워크 패킷 분석이 가능함

-     패킷의 분류는 [Hosts], [DNS], [TCP], [UDP], [HTTP], [ICMP], [IRC], [Suricata], [Snort]로 이루어짐

[그림 12] [Network Analysis] 메뉴


 


분석 결과 [Dropped Files]

-      대상 프로그램이 실행되면서 생성 또는 다운로드된 파일 정보를 확인할 수 있음 

[그림 13] [Dropped Files] 메뉴

 

  

 

분석 결과 [Process Memory]

-      덤프된 프로세스 메모리 정보를 확인할 수 있음


[그림 14] [Process Memory] 메뉴

분석 결과 [Admin]

-      해당 작업에 대한 정보 확인 및 삭제 등의 관리가 가능함 


[그림 15] [Admin] 메뉴

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

Cuckoo Sandbox – 설치 및 구축(2/2)

‘Cuckoo Sandbox – 설치 및 구축(1/2)’ 문서에 작성된 설치 방법에 따라 정상적으로 ‘Cuckoo Sandbox’ 구성 프로그램을 설치하였다면, 실제 악성코드를 분석하게 될 가상 환경을 구축한다.

가상 머신 Guest PC OS의 경우 ‘Windows 7 Professional K x64’로 설치가 진행되며, 해당 OS 설치 파일은 본 문서에서 제공하지 않으므로 별도로 설치 파일을 준비하여 가상 환경을 구축한다.

설치를 진행하기 이전에 ‘Cuckoo Sandbox – 설치 및 구축(1/2)’ 문서에 작성된 [1] 구성 환경 및 설치 프로그램 목록을 참고하여 버전 및 설치 환경을 가급적 동일한 버전으로 구축을 진행한다.

 

Virtual Box 및 가상 머신 OS 설치

-      사용자 환경에 호환되는 ‘Virtual Box’ 버전을 다운로드하여 설치

-      AWS(Amazon Web Service)와 같은 ‘Xen’ 환경에서는 가상 머신 ‘Virtual Box’ 실행 불가

-      본 가이드에서는 5.1.6 버전을 예제로 설치

root@A3SECURITY:/~# cd /opt

root@A3SECURITY:/opt# sudo apt-get install libqt4-opengl libsdl1.2debian -y

root@A3SECURITY:/opt# sudo apt-get install build-essential linux-headers-#(uname -r)

root@A3SECURITY:/opt# sudo wget http://download.virtualbox.org/virtualbox/5.1.6/virtualbox-5.1_5.1.6-110634~Ubuntu~trusty_amd64.deb

(설치 환경에 따라 amd64, i386 다운로드)

root@A3SECURITY:/opt# sudo dpkg -i virtualbox-5.1_5.1.6-110634~Ubuntu~trusty_amd64.deb

root@A3SECURITY:/opt# sudo usermod -g vboxusers cuckoo

root@A3SECURITY:/opt# sudo wget http://download.virtualbox.org/virtualbox/5.1.6/Oracle_VM_VirtualBox_Extension_Pack-5.1.6-110634.vbox-extpack

root@A3SECURITY:/opt# sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.6-110634.vbox-extpack

root@A3SECURITY:/opt# sudo /sbin/vboxconfig

root@A3SECURITY:/opt# sudo /etc/init.d/vboxdrv setup

root@A3SECURITY:/~# virtualbox&

  

Virtual Box Guest PC 생성 (Windows 7 Professional K)

-     
아래[그림 1]와 같이 ‘Virtual Box’ 가상 머신 생성

[그림 1] Create Virtual Box


[그림 2] Create Virtual Box

 

 

 

 

-     
아래[그림 4]와 같이 가상 하드 디스크의 위치 및 크기를 설정하게 되면 가상 머신 생성 완료

[그림 3] Create Virtual Box

Guest PC OS 설치

새로 생성된 가상 머신에 악성코드를 직접 실행하게 될 가상 OS를 설치한다. 예제로 ‘Windows 7 Professional K x64’를 설치하였으며, 설치 과정은 생략하였다. 본 문서는 ISO 파일의 다운로드 URL이 포함되어 있지 않으므로 별도로 파일을 준비하여 설치를 진행한다.

-     
Virtual Box 실행한 뒤 가상 디스크 ISO 파일을 삽입하여 OS 설치

root@A3SECURITY:/~# sudo virtualbox &


[그림 4] 가상 디스크 ISO 파일 삽입


[그림 5] 가상 OS Windows 7 설치

Guest PC 네트워크 설정


설치가 완료된 후 IP 주소 및 방화벽을 외부와 통신이 가능하도록 설정한다. 설정된 IP 주소는 ‘Virtualbox.conf’ 등의 설정 파일에서 동일하게 적용된다.



[그림 6] IP 주소 설정

 

[그림 7] 방화벽 설정


Guest PC 구성 프로그램 다운로드 및 설치

-      Guest PC에서 구성 프로그램 ‘Python’ ‘Python Image Library’를 다운로드 및 설치

Python 2.7.3 Download : http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi

PIL 1.1.7 Python Imaging Library (Windows only) Download : http://pythonware.com/products/pil


[그림 8] Python Download

-      Host PCGuest PC 간 자료 전송을 위해 ‘agent.py’ 파일을 Guest PC로 복사

-      파일 공유를 위해 [바탕화면>Shared] 폴더를 생성하여 공유 설정 및 ‘agent.py’ 파일 복사

-      파일의 실행 여부 확인을 위해 ‘Process-Explorer’ 다운로드

root@A3SECURITY:~# sudo cp /opt/cuckoo/agent/agent.py /home/cuckoo/Desktop/Shared/

Process-Explorer Download : https://download.sysinternals.com/files/ProcessExplorer.zip

 

agent.py, Process-Explorer 실행 및 스냅샷 기록

-     
Guest PC에서 ‘agent.py’, ‘Process-Explorer’Administrator 권한으로 실행


[그림 9] agent.py, Process-Explorer 실행


-      ‘agent.py’‘Process-Explorer’가 실행 중인 상태에서 스냅샷을 기록



[그림 10] 스냅샷 기록

Virtual Box Host-only Interface 생성 및 설정

-      Host PCGuest PC 간의 통신에 사용될 host-only 인터페이스 ‘vboxnet0’ 생성

root@A3SECURITY:~# sudo vboxmanage hostonlyif create

(오류 발생되는 경우 아래 참고)

root@A3SECURITY:~# sudo vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1

root@A3SECURITY:~# ifconfig

[오류 구문]

The vboxdrv kernel module is not loaded. Either there is no module available for the current kernel (시스템 커널 버전) or it failed to load.

[해결 방안]

root@A3SECURITY:~# sudo apt-get install dkms



Guest PC에서 Host PC 통신 시 vboxnet0으로 통신하도록 NIC 설정

-      Guest PC를 종료 후 설정, ‘Virtual Box’ 네트워크 설정 GUI에서 설정 가능

root@A3SECURITY:~# sudo vboxmanage modifyvm cuckoo1 --hostonlyadapter1 vboxnet0  root@A3SECURITY:~# sudo vboxmanage modifyvm cuckoo1 --nic1 hostonly

[오류 구문]

Guest PC NIC 설정 후 error 발생 할 경우 가상 머신 등록 설정

[해결 방안]

root@A3SECURITY:~# sudo vboxmanage registervm /root/VirtuaBox\ VMs/cuckoo1/cuckoo1.vbox

IPtables 규칙 추가

-      Guest PC 네트워크를 NAT 처럼 사용할 수 있도록 ‘iptables’ 규칙 추가

-     
재부팅 시 설정한 ‘iptables’ 규칙이 초기화 되므로, 스크립트 파일 생성 후 사용할 것을 권장


root@A3SECURITY:~# sudo iptables -A FORWARD --out-interface eth0 --in-interface vboxnet0 --source 192.168.56.0/24 --match conntrack --ctstate NEW -j ACCEPT

root@A3SECURITY:~# sudo iptables -A FORWARD --m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

root@A3SECURITY:~# sudo iptables -A POSTROUTING -t nat -j MASQUERADE


[그림 11] IPtables 규칙 추가

Host PCMASQUERADE IP 공유 설정

-      Guest PC의 통신을 Host PC에서 포워딩하기 위해 ‘MASQUERADE’를 아래와 같이 설정

root@A3SECURITY:~# sudo sysctl -w net.ipv4.ip_forward=1

root@A3SECURITY:~# sudo sysctl -p

Virtualbox.conf 설정

-      기본설정으로 사용 가능하며, ‘machines’을 여러 개 생성하여 다중 분석이 가능함

root@A3SECURITY:/opt/cuckoo# sudo vi /opt/cuckoo/conf/virtualbox.conf

[virtualbox]

mode = gui

machines = cuckoo1 // (Guest PC)

[cuckoo1]

label = cuckoo1

platform = windows

ip = 192.168.56.110 // (설정 IP 주소)

snapshot = CuckooStarted(20161004)  // (스냅샷 지정)

interface = vboxnet0

resultserver_ip = 192.168.56.1

resultserver_port = 2042

Cuckoo Sandbox 환경 구축

Cuckoo Sandbox의 필요 구성 프로그램들을 정상적으로 설치한 뒤, 추가로 몇 가지 설정을 마치게 되면 Cuckoo Sandbox의 구축이 완료된다. 구축 과정 중에 설치 환경 또는 적절하지 않은 설정으로 인한 오류가 발생될 수 있으니, 구축 과정과 오류 복구에 대한 설명에 따라 구축을 진행한다.

웹 프레임워크 구축

Cuckoo Sandbox는 콘솔(CUI) 제어도 가능하지만, 사용자의 편의를 위해 분석 결과 등을 웹 프레임워크에서 GUI 환경을 제공한다. 이를 사용하기 위해서는 웹 프레임워크 도구인 ‘Django’와 연동 DBMS ‘MongoDB’를 설치해야한다.

Django, MongoDB 설치 및 실행

-      ‘apt-get’ 명령어를 통해 ‘MongoDB’ 설치

-      ‘pip’ 명령어를 통해 ‘Django’ 설치

-      ‘/opt/cuckoo/web’ 디렉터리의 ‘manager.py’를 이용하여 ‘Django’를 실행

-      Django 기본 실행 시 ‘127.0.0.1:8000’으로 설정 됨

root@A3SECURITY:~# sudo apt-get install mongodb mongodb-dev python-pymongo -y

root@A3SECURITY:~# sudo pip install django==1.8.4

root@A3SECURITY:~# sudo /opt/cuckoo/web/manage.py runserver 0.0.0.0:8000

 

 

[오류 구문]

Failed to connect to databaseserverip:27017, reason: errno:111 Connection refused

[해결 방안]

root@A3SECURITY:~# sudo apt-get install --reinstall mongodb

 

[오류 구문]

(admin.E402) 'django.contrib.auth.context_processors.auth' must be in TEMPLATES in order to user the admin application.

[해결 방안]

/opt/cuckoo/web/web/settings.py 아래와 같이 소스코드 변경

TEMPLATES = [

    {

        "BACKEND": "django.template.backends.django.DjangoTemplates",

        "DIRS": [

         'template'

        ],

        "APP_DIRS": True,

        "OPTIONS": {

                'context_processors': [

                        'django.template.context_processors.debug',

                        'django.template.context_processors.request',

                        'django.contrib.auth.context_processors.auth',

                        'django.contrib.messages.context_processors.messages',

                        ],

                  },

        },

]         

MongoDB 설정

-      설정은 ‘/opt/cuckoo/conf’ 디렉터리의 ‘reporting.conf’ 파일에서 설정

[mongodb]

enabled = yes

host = 127.0.0.1

port = 27017

 

 

Cuckoo Sandbox 실행

-      Cuckoo Sandbox가 설치된 경로에서 ‘cuckoo.py’ Startup 파일 실행

-      로드(Load) Virtual Box Guest PC를 켜놓은 상태에서 Cuckoo Sandbox 실행해야 함

-      Snapshot을 지정한 경우 지정된 Snapshot으로 분석을 진행

-      Guest PC를 여러 개로 지정하고 싶은 경우 ‘cuckoo.conf’ 파일에서 [cuckoo2], [cuckoo3] 등을 추가하여 [cuckoo1]과 같은 방법으로 추가 설정할 수 있음


root@A3SECURITY:opt/cuckoo# sudo /opt/cuckoo/cuckoo.py

 

[오류 구문]

CRITICAL: CuckooCriticalError: Unable to import plugin "modules.processing.behavior": No module named dateutil.parser

[해결 방안]

root@A3SECURITY:~# sudo apt-get install python-pip –y

root@A3SECURITY:~# sudo pip install python-dateutil

 

[오류 구문]

Signature 패턴 등의 업데이트가 필요합니다

[해결 방안]

root@A3SECURITY:~# sudo /opt/cuckoo/utils/community.py -waf

 

[오류 구문]

[스크린샷 에러] could not find tesseract binary screenshot ocr aborted

[해결 방안]

root@A3SECURITY:~# sudo apt-get install tesseract-ocr

 

[오류 구문]

Unable to import yara (please compile from sources)

[해결 방안]

(yara 컴파일이 안되어 import 불가)

root@A3SECURITY:~# cd /opt

root@A3SECURITY:/opt# sudo git clone --recursiv https://github.com/plusvic/yara-python

root@A3SECURITY:/opt# cd yara-python

root@A3SECURITY:/opt/yara-python# sudo python setup.py build

root@A3SECURITY:/opt/yara-python# sudo python setup.py install

   

[오류 구문]

Unable to import pefile (`pip install pefile`)

[해결 방안]

(현재 설치되어 있는 pefile을 삭제한 뒤 수동으로 pefile을 재설치 해야함)

root@A3SECURITY:~# python

>>> import pefile

(ImportError: no module named pefile 에러 발생 시 재설치 필요)

root@A3SECURITY:~# sudo pip uninstall pefile

root@A3SECURITY:~# sudo wget https://github.com/erocarrera/pefile/files/192316/pefile-2016.3.28.gz

root@A3SECURITY:~# sudo pip uninstall pefile

tar xvfz pefile-2016.3.28.tar.gz

cd pefile-2016.3.28

python setup.py build

python setup.py install

 

[오류 구문]

분석 결과 스크린샷 탭에서 ‘Screenshot No available’ 구문으로 스크린샷 기능이 안될 경우

[해결 방안]

root@A3SECURITY:~# sudo vi /opt/cuckoo/conf/virtualbox..conf

(아래와 같이 설정)

[virtualbox]

mod = headless -> gui 로 변경

(설정되었더라도 Guest PC가 정상적으로 실행되지 않을 경우 스크린샷 기능 정상 작동 불가)

  

[오류 구문]

Cuckoo Sandbox 분석 로그에 Upload File Size 오류가 날 경우

[해결 방안]

root@A3SECURITY:~# sudo vi /opt/cuckoo/conf/cuckoo.conf

[resultserver]

upload_max_size = 10485760 (기본 10Mb, 임의로 지정)

analysis_size_limit = 10485760 (기본 10Mb, 임의로 지정)

 

 

-      Cuckoo SandboxStartup 파일인 ‘/opt/cuckoo/cuckoo.py’Django Startup 파일인 ‘/opt/cuckoo/web/manage.py’ 파일이 정상적으로 실행된 경우 아래[그림 13]와 같이 나타남

[그림 12] Cuckoo Sandbox, Django 정상 작동 모습

-      정상적으로 구축 과정을 완료한 뒤, 웹 브라우저로 ‘Django’를 실행할 때 설정한 IP주소와 포트번호를 입력(‘http://91.212.102.21:8000’)하면 아래[그림 14]와 같이 Cuckoo Sandbox의 대시보드 확인이 가능함

[그림 13] Cuckoo Sandbox 대시보드

 

-      Cuckoo Sandbox를 관리하는 ‘Django’ 웹 페이지에 접속하면 아래[그림 18]와 같은 상단 메뉴를 확인할 수 있음

-     
상단 메뉴에 대한 자세한 설명은 아래[2]에서 확인이 가능함




[그림 14] Cuckoo Sandbox 상단 메뉴

상단 메뉴

설명

Dashboard

진행 중인 작업과 완료된 작업, 대기 중인 작업 등의 상태를 확인할 수 있으며, 완료된 결과를 반영하여 Total tasks, Total samples 카운트

Recent

최근 분석 내역을 확인할 수 있음

Pending

분석 대기중인 작업을 확인할 수 있음

Search

Elastic Search 모듈을 추가한 후 분석 내용을 검색할 수 있음

Submit

분석 대상 파일을 업로드할 수 있음

Import

분석 대상 zip 파일을 업로드할 수 있음

[1] 상단 메뉴 설명

-     
분석 완료 후 상단 메뉴의 [Recent] 탭에서 분석 결과를 확인할 수 있으며, 분석 결과의 Report 메뉴는 아래[그림 16]와 같이 나타남

[그림 15] 분석 결과 Report 메뉴


Report 메뉴

설명

Summary

파일 상세 정보, 시그니쳐, 스크린샷, 네트워크 분석, 레지스트리, 뮤텍스, 프로세스, 경로 등의 분석 요약 내용을 확인할 수 있음

Static Analysis

대상 파일의 포맷, 버전, 섹션, 리소스 등의 정보를 확인할 수 있으며 이를 통해 정적 분석이 가능함

Behavioral Analysis

분석 중 프로그램이 실행되고 있을 때 프로세스 상태와 시작 및 종료 시간, 로드된 dll, 리턴 값 등의 정보를 확인할 수 있으며, 이를 통해 동적 분석이 가능함

Network Analysis

대상 프로그램이 실행되면서 발생된 패킷에 대한 정보를 확인하여 네트워크 패킷 분석이 가능함

Dropped Files

대상 프로그램이 실행되면서 생성 또는 다운로드된 파일 정보를 확인할 수 있음

Process Memory

덤프된 프로세스 메모리 정보를 확인할 수 있음

Admin

해당 작업에 대한 정보 확인 및 삭제 등의 관리가 가능함

[2] 분석 결과 Report 메뉴 설명


블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

Cuckoo Sandbox 설치 및 구축 (1/2)


최근 컴퓨터와 인터넷의 보급이 크게 확산됨에 따라 인간의 삶을 편하고 윤택하게 만들어졌으나 이에 따른 부작용 역시 급증하고 있다. 그중 분산서비스(DDoS) 공격, 개인정보 유출, 해킹 등은 대부분 악성코드에 의해 발생하며, 사용자의 피해가 지속해서 증가하고 있다. 한국인터넷진흥원 인터넷침해사고 대응 센터의 “14년 인터넷 침해사고 대응계획보고서에 따르면, 하루 평균 악성코드 배포량이 2013년에 1,435종에서 2014년에 8,847종으로 한해 사이에 약 6배 증가했다는 것을 알 수 있다. 이처럼 악성코드가 급격히 증가한 이유는 악성코드 제작자들이 자동화 도구로 유사 · 변종 악성코드를 빠르게 제작하고 있기 때문이다. 자동화 도구로 제작된 악성코드는 EPO(Entry Point Obscuring)나 암호화 코드 부분만 변경하여 악성 행위는 같으나 겉모습만 바뀌어 백신의 탐지를 피하고 있다. 이러한 다형성 기법의 보편화로 인하여 유사 · 변종 악성코드가 급증하고 있으며 분석 방해 기법도 진화하는 추세이다.

이처럼 빠르게 진화하는 수많은 악성코드를 직접 수집하여 수동으로 분석할 수는 없으므로 이에 대응하기 위해선 자동화 분석 도구가 필요하다. 이번에 소개할 도구는 자동화 악성코드 분석 도구 ‘Cuckoo Sandbox’이다.

‘Cuckoo Sandbox’Sandbox 환경에서 악성 파일을 실행 및 분석하여 분석된 결과를 자동으로 수집해 주는 도구이다. 이 도구는 Python으로 제작된 오픈소스 프로젝트이므로 누구나 소스 코드를 변경할 수 있다는 장점이 있다.

본 문서를 통해 ‘Cuckoo Sandbox’를 구축하면서 발생할 수 있는 오류에 대한 해결 방안과 설치 방법에 대한 가이드를 제시하고, ‘Cuckoo Sandbox’의 각 기능을 소개한다.

[그림 1] Cuckoo Sandbox

다운로드 URL (https://cuckoosandbox.org/)

 

‘Cuckoo Sandbox’의 주요 기능

-      악성코드에 의해 수행되는 Windows API 함수 호출 추적

-      악성코드에 의해 파일 생성 및 복사, 삭제 확인

-      선택한 프로세스의 메모리 덤프

-      분석 시스템의 전체 메모리 덤프

-      악성코드 실행하는 동안 스크린샷(Process explorer)

-      네트워크 패킷 덤프

‘Cuckoo Sandbox’를 사용하기 위해서는 제작된 언어 Python을 설치해야 하며, 필요 라이브러리와 구성프로그램들을 설치하여 연동해야 정상적으로 사용이 가능하다. ‘Cuckoo Sandbox’를 구축하기 이전에 설치해야 할 구성 프로그램들은 아래[ 1]와 같다.

OS 및 구성 프로그램

버전

용도 (계정명 / 패스워드)

Ubuntu-Desktop-amd64

v14.04.4 (4.2.0-27.generic)

호스트 OS (cuckoo, root / cuckoo)

Virtual Box

v5.1.6

가상 머신 도구

Windows 7

Professional K Korean X64

가상 머신 OS (cuckoo / cuckoo)

Cuckoo Sandbox

v2.0-RC1

Cuckoo Sandbox

MySQL

v5.5.52

DBMS (root / cuckoo)

Mongodb

v2.4.9

DBMS

Python

v2.7.3

사용 언어

PIL

v1.1.7

Python Screenshot 모듈

PE file

V1.2.9.1-1.1

실행 파일 압축 및 시그니쳐 확인

ssdeep

v2.9

Fuzzy Hash 확인

Yara

v3.5.0

패턴을 이용한 악성코드 식별, 분류

TCPdump / libpcap

v4.5.1 / v1.5.3

네트워크 패킷 분석

Django

v1.8.4

파이썬 웹 프레임워크

Iptables

v1.4.21

시스템 내장 방화벽

Process-Explorer

v16.12

프로그램 실행 여부 확인

[1] 구성 환경 및 설치 프로그램 목록

모든 설치 과정은 리눅스 계열의 응용프로그램 설치 디렉토리인 ‘/opt’ 경로에서 진행된다. 또한, Windows 7 Professional ISO 파일의 다운로드 URL은 본 문서에 포함되어 있지 않으므로 OS 설치 파일을 별도로 준비하여 설치를 진행한다.

루트 계정 활성화

-      각 구성 프로그램 설치를 위한 관리자(root) 계정 활성화

ubuntu@A3SECURITY:~# sudo su – root

apt-get 업데이트 및 시스템 재부팅

-      ‘/etc/apt/source.list’의 인덱스를 기반으로 패키지의 정보 업데이트 및 시스템 재부팅

root@A3SECURITY:~# sudo apt-get update; sudo apt-get upgrade –y; sudo apt-get dist-upgrade-y; sudo apt-get autoremove –y; sudo shutdown –r now later

파이썬(Python) 설치

-      Cuckoo Sandbox‘python’으로 제작 되었기 때문에 프로그램 실행하기 위해 필요

root@A3SECURITY:~# sudo apt-get install python python-dev python-sqlalchemy python-dpkt python-jinja2 python-magic python-pymongo python-bottle -y

SVN 설치

-      소프트웨어 버전 관리 프로그램이며 최신 버전의 소스코드를 받기 위해 설치

root@A3SECURITY:~# sudo apt-get install subversion

root@A3SECURITY:~# sudo svnadmin create --fs-type bdb test

PE File 설치

-      ‘SVN Checkout’ 명령어를 이용하여 ‘PE File’의 최신 버전 소스코드를 다운로드

root@A3SECURITY:~# cd /opt

root@A3SECURITY:/opt# sudo apt-get install python-pefile

root@A3SECURITY:/opt# sudo svn checkout https://github.com/erocarrera/pefile/trunk pefile

root@A3SECURITY:/opt# cd /opt/pefile

root@A3SECURITY:/opt/pefile# sudo python setup.py build

root@A3SECURITY:/opt/pefile# sudo python setup.py install

Ssdeep 설치

-      ‘ssdeep’‘Fuzzy Hash’를 사용하여 원본 파일과의 유사도를 파악하기 위해 사용

-      Hash 값은 파일의 일부만 수정해도 전혀 다른 값이 나오지만, ‘Fuzzy Hash’는 하나의 파일을 블록 별로 구분하여 Hashing을 하기 때문에 원본과 유사한 파일을 찾아낼 수 있다.

root@A3SECURITY:~# cd /opt

root@A3SECURITY:/opt# sudo apt-get install git

root@A3SECURITY:/opt# sudo apt-get install build-essential git libpcre3 libpcre3-dev libpcre++-dev -y

root@A3SECURITY:/opt# sudo wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.9/ssdeep-2.9.tar.gz

root@A3SECURITY:/opt# sudo tar -xvf ssdeep-2.9.tar.gz

root@A3SECURITY:/opt# sudo rm -f ssdeep-2.9.tar.gz

root@A3SECURITY:/opt# sudo mv ssdeep-2.9 ssdeep

root@A3SECURITY:/opt# cd /opt/ssdeep

root@A3SECURITY:/opt/ssdeep# sudo ./configure

root@A3SECURITY:/opt/ssdeep# sudo make && make install

root@A3SECURITY:/opt/ssdeep# sudo ldconfig

root@A3SECURITY:/opt/ssdeep# cd /opt

root@A3SECURITY:/opt# sudo git clone https://github.com/kbandla/pydeep.git pydeep

root@A3SECURITY:/opt# cd /opt/pydeep

root@A3SECURITY:/opt/pydeep# sudo python setup.py build

root@A3SECURITY:/opt/pydeep# sudo python setup.py install

Yara 설치

-      시그니쳐 기반으로 파일의 패턴을 분석하여 악성코드를 분류하는데 사용

-      행동 기반 탐지를 하지 못하지만, 패턴 기반으로 악성 파일이나 프로세스를 탐지

-      식별을 위해 탐지 패턴 즉, ‘rule’ 파일을 생성해야 함

root@A3SECURITY:~# cd /opt

root@A3SECURITY:/opt# sudo wget https://github.com/VirusTotal/yara/archive/v3.5.0.tar.gz

root@A3SECURITY:/opt# sudo apt-get install autoconf automake libtool make gcc -y;

root@A3SECURITY:/opt# sudo tar -xvf v3.5.0.tar.gz

root@A3SECURITY:/opt# sudo rm -f v3.5.0.tar.gz

root@A3SECURITY:/opt# mv yara-3.5.0 yara

root@A3SECURITY:/opt# cd yara

root@A3SECURITY:/opt/yara# sudo ./bootstrap.sh

root@A3SECURITY:/opt/yara# sudo ./configure

root@A3SECURITY:/opt/yara# sudo make

root@A3SECURITY:/opt/yara# sudo make install

TCPdump, pcap 설치

-      파일 실행 시 발생하는 트래픽 분석을 위해 ‘TCPdump’, ‘pcap’ 설치

root@A3SECURITY:~# sudo apt-get install tcpdump libpcap-dev –y

root@A3SECURITY:~# sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

 

 

 

Cuckoo Sandbox 설치

구성 프로그램 간에 버전이 서로 호환되어야 정상적인 설치 및 실행이 가능하며, 설치 환경에 따라 호환되는 버전이 상이할 수 있으니, 가급적 동일한 사용 환경을 갖춰 설치를 진행하는 것이 좋다.

Virtual box 사용자 계정 생성

root@A3SECURITY:/opt# sudo useradd cuckoo

Cuckoo Sandbox 다운로드

root@A3SECURITY:/opt# sudo git clone https://github.com/cuckoobox/cuckoo.git cuckoo

MySQL 설치 및 DB 연결

-      기본으로 제공되는 DBMS‘sqlite’이나 본 가이드에서는 ‘MySQL’을 사용

root@A3SECURITY:/~# sudo apt-get install mysql-server python-mysqldb -y

(mysql root 패스워드 설정)

root@A3SECURITY:/~# sudo mysql -u root -p

mysql> create database cuckoo;

mysql> grant all privileges on cuckoo.* to cuckoo@localhost identified by 'cuckoo';

mysql> flush privileges;

mysql> quit

cuckoo.conf 파일 설정

-     
‘MySQL’ 설치 후 DBMS와 연결을 맺기 위해 아래[그림 1]와 같이 ‘cuckoo.conf’ 파일 수정

root@A3SECURITY:/~# sudo vi /opt/cuckoo/conf/cuckoo.conf

[그림 2] cuckoo.conf 파일 수정



(가상 환경 구축 및 설정에 대한 설명은 ‘Cuckoo Sandbox – 설치 및 구축(2/2)’ 문서에서 이어집니다.)

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

웹상에 존재하는 대부분의 웹 사이트는 오픈소스 CMS(Content Management System)를 기반으로 만들어져 있다고 해도 과언이 아니다. 최근에도 역시 CMS 기반의 웹 사이트를 구축하는 기업 혹은 개인 사용자가 증가하는 추세이다. CMS(Content Management System)는 콘텐츠 관리 시스템으로 개발 지식이 없어도 자유롭게 테마나 레이아웃 등을 설정하여 웹 서비스를 할 수 있도록 사용자에게 편리한 기능들을 제공하는 일종의 플랫폼(Platform)이다.


최근 등장하고 있는 많은 CMS 서비스 중 사용자에게 가장 많은 인기를 받는 서비스는 ‘WordPress, Joomla, Drupal’을 예로 꼽을 수 있다. 이 세 가지 서비스의 공통점은 오픈소스 CMS’라는 점과 사용자가 많아 테마나 플러그인의 수가 급증하고 있다는 점이다.


하지만, 대중적으로 사용량이 증가하게 되면서 보안 이슈 역시 증가하고 있다. 취약점 정보를 확인할 수 있는 대표적인 사이트 익스플로잇-디비(http://exploit-db.com)’에서만 찾아봐도 누구나 수많은 공격 코드를 접할 수 있다. 따라서 취약점 패치가 이루어지지 않은 모든 사이트가 누군가의 표적이 될 수도 있다. 웹 서비스를 제공하는 관리자의 입장에서는 플러그인의 확장성을 높여 서비스하는 만큼, 플러그인의 위협에 대해 스스로 보안에 신경을 써야 하는 시점이다.


이번에 소개할 도구는 이러한 CMS 플랫폼에 대한 취약점을 점검하기 위한 도구 ‘CMSmap’이다. ‘CMSmap’은 파이썬(Python)으로 제작된 오픈소스 기반의 CMS 취약점 점검 도구이며, 오픈소스 CMS 서비스인 ’WordPress, Joomla, Drupal’을 사용하는 PHP 언어 기반 웹 서비스를 대상으로 취약점을 점검할 수 있다.


[그림 1] WordPress – Joomla - Drupal


다운로드 URL (https://github.com/Dionach/CMSmap)

 

 

본 테스트는 취약점 점검을 위해 칼리리눅스(Kali-Linux) 가상 환경에서 워드프레스(WordPress)를 구축하여 진행하였다. 이 도구의 다운로드는 리눅스 환경에서 ‘Git’ 명령 한 줄로 쉽게 다운로드 받을 수 있다. 다운로드 시 입력한 명령어는 아래 [그림 2]와 같다.


[그림 2] CMSmap 다운로드 명령어


위 명령어로 파일을 내려 받은 뒤 해당 디렉토리(CMSmap)로 이동하여 ‘cmsmap.py’ 파일을 실행해 스캔을 시작할 수 있다. 옵션을 포함하지 않거나 –h(도움말) 옵션을 포함해 ‘cmsmap.py’ 파일을 실행시킬 경우 스캔 시 사용 가능한 전체 옵션을 확인할 수 있으며, 옵션에 대한 자세한 설명은 아래와 같다.

[그림 3] CMSmap 사용 가능한 전체 옵션

메뉴

설명

-t, --target

타겟의 URL (Ex. ‘https://example.com/’)

-f, --force

스캔 대상 (W)ordpress, (J)oomla, (D)rupal (괄호 안 문자 적용)

-F, --fullscan

전체 플러그인을 대상으로 스캔, 매우 느림

-a, --agent

Header 부분의 User-agent를 임의로 설정

-T, --threads

쓰레드를 임의로 설정 (기본설정: 5)

-i, --input

텍스트 파일의 입력된 대상을 다중으로 스캔

-o, --output

스캔 결과를 파일로 저장

--noedb

Exploits 검색 없이 플러그인 스캔

-u, --usr

유저명 브루트포스(Brute-Force)

-p, --psw

패스워드 브루트포스(Brute-Force)

--noxmlrpc

XML-RPC 사용 없이 브루트포스(Brute-Force)

-k, --crack

패스워드 해시 파일 스캔(Hashcat이 설치가 되어 있어야 함, WordPressJoomla만 해당)

-w, --wordlist

스캔에 사용될 Wordlist 파일을 임의로 설정

-v, --verbose

Verbose 모드 설정(기본설정: false, true 변경 시 스캔 과정 확인 가능)

-U, --update

업데이트 기능 (C)MSmap, (W)ordpress 플러그인 테마, (J)oomla 컴포넌트, (D)rupal 모듈, (A)ll (괄호 안 문자 적용)

-h, --help

도움말

[1] CMSmap 메뉴 설명


대상에 대한 정보가 부족할 경우 타겟(-t)만 지정하여도 스캔을 시작할 수 있으며, 이 경우 상세한 정보를 입력한 경우보다 스캔의 속도가 느리다. 본 테스트에서는 대상이 워드프레스를 사용한다는 정보를 수집하였다는 가정하에 진행하였으며, 사용한 명령어는 [그림 4]과 같다.

 


[그림 4] CMSmap 스캔 동작 모습


해당 명령어로 대상 웹 사이트에 스캔한 결과 워드프레스의 버전과 디폴트 설치 파일, 사용 중인 플러그인, 유저명, 설정 파일 등 여러 취약점을 발견할 수 있었으며, 수집된 정보를 통해 이차적인 공격이 가능하다는 사실을 확인할 수 있다.


스캔 결과에서는 위험도에 따라 기호가 나타나며 [H] High, [M] Mid, [L] Low, [I] Info, [-] Message 4가지로 분류된다. 이처럼 나타나는 위험도를 확인하여 관리자는 보안이 시급한 취약점이 무엇인지를 한눈에 파악할 수 있다.


‘CMSmap’의 다른 기능으로는 브루트 포스(Brute-Force) 및 웹셸(WebShell) 업로드 기능이 있다. 스캔이 완료된 뒤 스캔 결과에서 얻어낸 계정을 대상으로 패스워드 사전(Wordlist)을 이용한 브루트 포스(Brute-Force) 공격을 시도할 수 있다. 브루트 포스 공격에 성공하게 되면, Valid Credentials(유효한 인증)라는 문구가 나타나며 대상 웹 서비스에서 사용 중인 유저명과 패스워드가 그대로 출력된다.


[그림 5] Brute Force 공격 시도


브루트 포스 공격에 성공한 다음, 웹셸(WebShell)을 업로드할 것인지에 대한 문구가 나타나게 되는데 여기서 y(Yes)를 입력하면 대상 웹 서버에 웹셸이 자동으로 업로드된다. 업로드되는 경로는 플러그인이 설치되는 경로(C:\APM_Setup\htdocs\wp-content\plugins\wp-shell\shell.php)와 같다.


업로드가 완료되면 웹셸을 이용하여 해당 서버 시스템에 직접적으로 명령을 실행할 수 있다. 웹셸을 실행시키는 URL [http://대상 웹 주소/wp-content/plugin/wp-shell/shell.php]이다.

[그림 6] 업로드된 웹셸(WebShell)로 명령 실행


웹셸이 플러그인으로 자동 설치될 경우 관리자는 워드프레스 관리자 페이지를 통해 [설치된 플러그인] 메뉴에서 [그림 6]과 같이 확인할 수 있다. 하지만 관리자의 계정을 얻어낸 다음 수동으로 웹셸을 업로드하게 될 경우 이를 쉽게 확인하기 어려우며, 웹셸을 설정 파일 등으로 위장하여 업로드한 경우는 발견하기가 더욱 힘들 것이다.

 

[그림 7] 설치된 플러그인 메뉴에서 확인되는 CMSmap


CMSmap 뿐만 아니라 오픈소스 CMS를 겨냥한 공격 도구들은 계속해서 늘어나고 있다. 오픈소스 CMS의 플러그인 또는 모듈이 계속해서 업데이트됨에 따라 공격 도구들 역시 업데이트가 되고 있으며, 이를 이용한 공격 사례들 역시 계속해서 증가하고 있다.


오픈소스 CMS 서비스는 특별한 개발 실력이 없어도 웹 사이트를 운영할 수 있다는 점에서 사용자에게 편리함을 가져다 줄 수 있다. 하지만 기초적인 보안도 이루어지지 않은 상태에서 웹 서비스를 운영할 경우 치명적인 피해를 가져올 수 있다. 웹 서비스를 제공하는 관리자의 입장에서는 서비스를 운영하기 이전에 이와 같은 보안 점검 도구를 이용하여 기초적인 보안을 갖춘 뒤에 안전한 서비스를 사용자에게 제공하는 것이 바람직하다.

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

최근 인터넷 사용이 급증함에 따라 사용자가 인터넷상에서 접할 수 있는 정보의 양 또한 급증하고 있다. 이러한 정보들은 사용자에게 여러 가지 목적으로 편리함과 유익함을 제공할 수 있지만 방대한 정보들이 무분별하게 제공될 경우 악의적인 의도를 품은 공격자에 의한 침해 사고로 이어질 가능성이 있다.


이처럼 인터넷상에 놓여있는 방대한 정보들을 사용자의 목적에 따라 필요 정보들만 모으는 행위를 정보 수집(Information Gathering)이라고 한다. 정보 수집은 대상의 URL만으로 도메인 네임(DNS), 호스트 네임, IP 주소, 사용자 이름, 환경 등을 알아내는 것이며 정의된 규칙이나 순서가 없으므로 사용자의 목적에 따라 다르게 정의될 수 있다.


일반적으로 모의 침투 프레임워크에서도 가장 중요한 단계 중 하나가 바로 정보 수집 단계이다. 정보 수집 단계는 정찰(Reconnaissance)과 스캐닝(Scanning) 등에 의해 이루어지며, 기술적인 요소는 많이 포함되지 않지만 가장 중요한 단계 중 하나이기 때문에 많은 시간이 투자될수록 다음 접근이 수월해진다. 정보를 수집할 때는 외부에 공개된 공격 대상에 대한 정보를 최대한 많이 수집하는 것이 좋다. 사소한 정보가 나중에 중요한 키(Key)가 될 수도 있기 때문이다.


반대로 이러한 정보들을 사용자에게 제공하는 담당자의 경우 불필요하고 민감한 정보들의 노출을 최소화하여 사전에 침해 사고를 예방해야 한다. 하지만 대다수의 경우 검색 엔진에 수집된 웹 페이지가 실제 웹 사이트에서 삭제가 되었더라도 캐시(Cache)에 저장된 페이지가 그대로 사용자에게 노출되고 있는 문제점이 존재한다. 이러한 문제점을 해결하기 위해서는 검색 엔진에 노출되고 있는 문서들을 파악해 불필요한 노출을 최소화하는 것이 좋다. 이번에 소개할 도구는 이처럼 민감한 정보들의 노출을 최소화하기 위해 사용되는 정보 수집 도구 중 하나인 ‘FOCA(Fingerprinting Organizations with Collected Archives)이다.


[그림 1] FOCA

다운로드 홈페이지 (https://www.elevenpaths.com/labstools/foca/)

FOCA는 스페인 기업의 Eleven Paths사에서 제작된 도구이며, 버전은 PRO 버전과 FREE 버전이 있다. PRO 버전은 상용 버전이었으나 현재는 모두 제작사의 홈페이지를 통해 다운로드 후 무료로 사용할 수 있다.


FOCA는 대상의 URL 정보만으로 서브도메인, 관련된 페이지나 정보를 자동으로 수집하고, 사용자가 수집된 정보들을 한눈에 파악하기 쉽도록 정리해준다. FOCA의 기본적인 동작 원리는 입력된 URL 정보로 검색엔진에서 사용하는 연산자를 이용하여 서브도메인을 탐색하고 크롤링(Crawling)을 통해 페이지의 정보나 문서 등 다양한 파일을 수집하여 메타데이터를 분석한다. 또한, FOCA는 포렌식(Forensics) 도구에 필수적인 파일로부터 메타데이터를 추출하는 기능과 추출된 메타데이터를 이용한 타임라인 생성 기능을 제공하고 있어 포렌식 도구로 사용하기에도 적절하다.


FOCA는 프로젝트 단위로 분류하여 동작하며 검색을 시작하기 위해서는 제일 먼저 새로운 프로젝트를 생성해야 한다. 아래[그림 2]와 같이 프로젝트명, 웹 사이트 도메인, 문서를 저장할 경로, 기타 메모 등을 입력하고 [Create] 버튼을 눌러 새로운 프로젝트를 생성할 수 있다. 프로젝트를 새로 생성하게 되면 ‘Project saved successfully!’ 메시지의 알림 창이 나타나며, 이는 성공적으로 프로젝트를 생성하였음을 뜻한다.


[그림 2] 새로운 Project 생성


대상 URL 정보를 입력하고 프로젝트를 새로 생성한 뒤 Search를 시작할 수 있다. [그림 3]과 같이 왼쪽 트리 메뉴 상단에 [Network] 탭으로 이동하여 적절한 옵션을 설정한 뒤 적용 후에 [Start] 버튼을 누르게 되면 정상적으로 검색이 시작된다. 옵션 설정 탭에서는 Web Search(Google, Bing), DNS Search, Dictionary Search, IP Bing, PTR Scan, Shodan & Robtex 등의 검색 옵션을 지정할 수 있다. 기본적으로 옵션은 모두 체크되어 있으며, 체크를 해제해 필요한 정보만을 획득하여 시간을 단축할 수도 있다. 본 테스트에서는 대상 URL을 구글(www.google.com)로 설정하여 진행하였다.


 

[그림 3] Search Option 설정 및 시작


검색 시작 버튼을 클릭해 검색을 시작하게 되면 왼쪽 트리 메뉴에 [Network], [Domains], [Roles], [Vulnerabilities], [Metadata] 등의 정보를 확인할 수 있다. 검색이 정상적으로 진행되고 있는 경우 각 메뉴에 [+] 표시가 나타나며, 해당 버튼을 클릭해 수집된 정보들을 확인할 수 있다. 메뉴에 따라 여러 가지 유용한 정보들이 수집되며 각 메뉴에 대한 설명은 아래[ 1]와 같다.


메뉴

설명

Network

대상 도메인에 대한 각 서버의 정보를 담고 있음

Domains

대상 도메인의 서브 도메인 정보를 담고 있음

Roles

Active Directory, DNS, Finger, Firewall, FTP, HTTP, HTTPS, Instant Messaging, IPS, Kerberos, LDAP, LoadBalancer, Mail, Proxy, Remote Desktop, SSH, Telnet, VPN, VoIP, WAF, Whois 등 사용 중인 서비스에 대한 정보를 담고 있음.

Vulnerabilities

Backups, Directory Listing, DNS Active Cache, DS_Store, GHDB, PHP Code Execution, Insecure Methods, IIS Short Name, Juicy files, Multiple choices, SQLi, Svn, Listing, Leaks, Proxy, Users, Zone Transfer, Heart Bleed 등 존재하는 취약점에 대한 정보를 담고 있음

Metadata

수집된 파일(Documents)을 확인할 수 있으며 Users, Folders, Printers, Software, Emails, OS, Passwords, Servers 등의 생성된 Metadata 정보를 담고 있음

       [1] FOCA 트리 메뉴 설명

 

 

[그림 4] 대상 웹 사이트에 포함되는 문서 수집 결과


대상에 대한 파일 검색이 완료된 이후에는 검색에서 수집된 파일들을 직접 다운로드할 수 있다. 이를 통해 기업의 미관리 자산이나 기밀정보 등이 유출될 수 있으며, 개인의 경우 개인 정보 또는 공개하고 싶지 않은 정보들이 외부로 노출되는 상황이 발생할 수 있다.



이렇듯 외부에 공개되는 정보들에 대해서는 항상 신경을 써야 한다. 아무런 의심 없이 올린 정보들이 타인에 의해 수집되고 있을 가능성도 배제할 수 없다. 웹 관리자뿐만 아니라 정보(문서)를 업로드하는 업로더 또한 정보들이 외부로 새어 나가고 있지 않은지를 확인하여 악의적인 의도를 가지고 정보를 수집하는 공격자로부터 중요 정보들을 지켜내야 할 것이다.

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

# 인터파크 사건 개요



인터파크 해킹 사고는 20165월에 APT 공격으로 인해 1,030만 건의 개인정보를 유출 당하는 등의 피해를 입고 경찰청에 수사요청을 하면서 드러난 사건입니다.


조사에 따르면 당시 해킹 사고는 공격자가 임직원의 동생을 사칭해 악성 파일이 첨부된 메일을 전송하였으며, 이를 실행시킨 임직원의 PC가 감염되면서 공격이 이루어진 것으로 확인됩니다.


악성코드에 감염된 임직원 PC는 공격자의 공격 통로로 이용됐으며, 이를 통해 DB서버에 접근한 공격자는 개인 정보를 빼돌리는 등의 공격을 행한 것으로 확인됩니다.


1,030만 건 이상의 개인정보를 획득한 공격자는 30억원에 이르는 금전 요구 메일을 발송해왔으며, 이에 경찰은 현재 사건에 대해 수사중이며 유출된 정보로 인한 2차 피해가 우려된다고 밝혔습니다.


# 공격 시나리오






다음은 인터파크 해킹 사고에 대한 공격 시나리오 입니다.


1. 공격자는 임직원을 대상으로 악성 파일이 첨부된 메일을 발송하여 악성 파일 실행을 유도하였습니다.

2. 악성 파일을 실행한 임직원 PC는 감염되어 공격자 측의 C&C서버와 연결을 맺으면서 공격 통로로 이용됩니다.

3~4. 서버 접근 권한이 있는 임직원 PC를 통해 공격자는 DB 서버 접속에 성공하였고 1,030만 건 이상의 개인 정보를 획득하는데 성공합니다.

5. 개인 정보 획득에 성공한 공격자는 인터파크에게  30억원에 이르는 금전 요구 메일을 발송합니다.






미래창조과학부와 방송통신위원회의 조사에 따르면 최초 53일 사칭 악성 메일을 발송하여 임직원APC가 감염되었고, 감염된 PC를 공격 통로로 사용하여 파일 공유 서버에 패스워드 대입 공격을 시도하였으며, 이에 성공한 공격자는 내부 망에 침입하여 감염을 확산시켰다고 합니다.




54일 파일공유서버를 경유하여 개인정보 취급 PC 접속에 성공하였고, 해당 PCDB 서버의 기존 연결 상태를 이용하여 DB서버 접속에 성공했으며, 이후 개인정보 등의 데이터 탈취를 시도했으나 실패하였고 결국 웹 서버를 통한 우회방법으로 개인정보를 빼내는데 성공했다는 것이 사건에 대한 설명입니다.



# 발생원인 및 결론


인터파크 사건의 발생 원인은 논리적인 망 분리의 허술함과 DB 서버 접근 통제에 실패했다는 것이 원인입니다. 일정시간 동안 별다른 업무가 없을 시 세션이 종료되어야 하지만 이에 관련된 설정이 미흡했다고 볼 수 있습니다. 따라서 개인정보 취급자 PC를 감염시키지 않았음에도 PCDB서버 간의 연결 중인 세션을 이용해 정보 탈취가 가능한 것으로 보여집니다.


APT 공격의 경우 정해진 공격 기법이 아니기 때문에 원천 차단이 불가하여 이를 사전 예방을 통해 공격이 발생했을 때 피해를 최소화 시켜야 합니다. 일반 사용자 또는 임직원의 경우 출처가 불명확한 URL 접근하지 말아야 되며, 알 수 없는 출처의 소프트웨어는 다운로드하지 말아야 합니다. 그리고 시스템을 관리하는 관리자의 경우 주기적인 백신 검사 및 운영체제 업데이트로 최신 상태를 항상 유지해야 할 것이며, 주요 시스템은 관리자만 접근이 가능하도록 설정하고, 영역별로 망을 분리하여 이와 같은 침해 사고에 예방해야 합니다.


블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

브라우저를 이용해 웹 서핑을 하거나 인터넷 상으로 이메일을 주고받을 때, 사용자는 알 수 없지만 수 많은 데이터들이 오고 간다. 이런 과정에서 사용자가 데이터들의 값을 변경해 원하는 정보를 탈취하거나 서비스 동작의 장애를 일으키는 공격을 시도할 수 있다. 이러한 데이터를 받은 웹 서버는 조작된 데이터들을 정상적인 데이터로 착각하고 임의의 조작 값에 해당되는 결과를 공격자에게 전송한다. 이것을 흔히 말하는 '웹 해킹'이라고 한다.


웹 해킹은 현재도 전세계적으로 많이 이루어지고 있는 공격이며, 그 공격 형태는 날이 갈수록 진화하고 있다. 최근에는 브라우저 상에서 개발자 도구를 통해서도 임의로 소스코드를 수정하여 공격을 시도할 수 있으며, 웹 해킹에 관련된 공격 도구들 또한 많이 생겨나고 있다.

 

이번에 소개할 도구는 웹 프록시 툴 버프스위트이다. 버프스위트는 웹 서버와 사용자간의 데이터를 주고받을 때 그 중간에서 데이터를 가로채어 HTTP Request/Response를 임의 값으로 변경 후 대상에게 재전송을 해주는 일종의 프록시 툴이다. 버프스위트는 다양한 기능들을 통해 보안 취약점을 발견하여 웹 어플리케이션 공격에 대한 분석 환경을 제공한다. 또한 다른 프록시 툴에 비해 프로그램이 가벼워 현재 많은 사람들이 이용 중 도구이다.

 

이 버프스위트를 이용하기 위해서는 JRE를 먼저 다운받아야 하는데 이 JRE Java Run Environment , 자바 실행 환경이라고 볼 수 있다. JREJAVA 언어로 만들어진 소프트웨어를 실행 시킬 경우에 사용되는 라이브러리이며, 이는 오라클 홈페이지(http://www.oracle.com/)를 통해서 다운받을 수 있다. JRE를 다운로드 후 설치하여 버프스위트를 실행하면 정상적으로 실행이 된다. 버프 스위트는 웹 브라우저와 대상 웹사이트 간에서 작동하며 동작 흐름 관계도는 아래와 같다.



버프 스위트를 실행하게 되면 제일 먼저 프록시 설정을 해주어야 한다. 여기서 프록시는 웹 서버와 사용자가 직접적으로 통신하는 사이에서 요청과 응답을 대신 전달하는 대리인(Agent)이라고 볼 수 있다. 이 프록시 설정은 본인의 로컬 호스트 주소(127.0.0.1)와 임의의 포트(8080 )로 설정하여 사용이 가능하다. 아래는 버프 스위트를 실행하여 프록시 설정을 한 상태의 모습이다.



 프록시 설정이 완료되면 사용자의 브라우저에서도 동일하게 로컬 호스트(127.0.0.1)와 포트(8080)를 동일하게 설정해주어야 한다. 이러한 설정을 마치게 되면 브라우저는 80번 포트를 통해 요청을 보내는 것이 아니라 8080번 프록시 포트로 요청을 보내게 되며 이를 8080번 포트로 대기중인 버프 스위트가 받아서 데이터를 웹 서버의 80번 포트로 재전송한다. 이를 설정함으로써 해당 호스트 주소와 포트의 프록시 경로로 모든 데이터를 주고받게 된다. 브라우저의 프록시 설정 방법은 아래에서 확인할 수 있다.

 


 이와 같이 프록시 설정을 마치게 되면, 사용자의 요청(Request)과 웹 서버의 응답(Response)을 버프 스위트에서 가로채어 받아온 데이터를 변경한 후 재전송할 수 있는데 이것이 Intercept라는 기능이다. 이 기능을 사용하기 위해서는 아래와 같은 간단한 설정이 필요하다.



 설정이 완료되면 버프스위트의 기본적인 설정은 모두 완료가 된 것이다. 모든 설정이 완료된 후 [Intercept is on] 이라는 문구가 적혀있는 버튼을 아래와 같이 눌러 적용하게 되면, 웹 서버와 사용자가 주고받는 모든 데이터들은 버프스위트 프록시 서버를 통해 지나가게 된다. 이를 통해 버프 스위트 사용자는 데이터를 임의로 변조하여 공격을 시도할 수 있다.



 위와 같이 Intercept 기능을 적용하여 전송되는 요청에 포함되는 헤더정보, 쿠키 값, 파라미터 값, URL 정보 등을 임의로 변경하여 전송할 수 있다. 만약 요청정보가 변경되어 전송이 되었고 이를 수신한 웹 서버에서 충분한 검증이 이루어지지 않는다면 치명적인 피해가 발생될 수 있다. 아래는 로그인 폼에서 아이디(test)와 비밀번호(1234)를 입력 후 폼을 전송하여 로그인 요청을 하게 되는데 프록시 서버가 이와 같은 요청 데이터를 중간에서 가로채어 사용자에게 보여주는 모습이다. 이처럼 버프스위트는 전송된 요청메시지를 사용자가 직접 볼 수 있을 뿐만 아니라 중간에서 사용자의 임의대로 입력 값을 변경할 수 있다. 또한, 웹 서버에서 응답해주는 응답 메시지 역시 사용자가 가로채어 직접 수정할 수 있다.  


 

  

 수정된 요청 메시지를 웹 서버에 전달하게 되면 웹 서버는 이를 정상적인 요청이라고 받아들이게 되며 사용자에게 정상적으로 로그인이 되었다는 응답을 사용자에게 보내게 된다. 아래는 ‘test’ / ‘1234’으로 입력 된 값을 임의의 입력 값 ‘test3’ / ‘1234’으로 변경한 후에 응답결과를 받은 모습이다. 이처럼 입력 값을 변경하여 로그인 폼에 입력되었던 ‘test’ 계정이 아닌 다른 계정 ‘test3’에 로그인 된 모습을 알 수 있다.



위와 같은 입력 값 변조공격은 공격이라고 볼 수 없을 만큼 매우 간단하지만 이 버프스위트를 통해 이루어지는 공격은 매우 다양하게 활용되며, 실제로 이 도구를 이용해 웹 서버에 대한 검증 절차를 우회하여 치명적인 피해를 입히는 등의 공격이 이루어지고 있다.

웹 서버를 대상으로 하는 공격은 점차적으로 진화하고 있다. 웹 브라우저에서 입력 값에 대한 필터링이 되어 있다 하더라도 이와 같은 프록시 툴로 우회하여 공격을 시도할 수 있기 때문이다. 그러므로 웹 서버를 관리함에 있어서는 가용성에만 치중되지 않도록 보안에도 신경을 써야 한다. 가장 기본적으로 요청 메시지와 응답 메시지 모두 암호화가 되어야 하며 이를 공격자가 변조할 수 없도록 하여 웹 서버를 대상으로 시도되는 공격에 대응하고 보안사고를 사전에 예방하길 권장한다

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,

 웹사이트를 운영하다 보면 많은 어려움이 존재한다. 그 중 특히 문제가 되는 것은 콘텐트의 업데이트가 잦은 경우에 발생된다. 대부분의 사이트는 개발이 완료되면 지속적으로 콘텐트가 업데이트된다. 이러한 업데이트가 계속적으로 이뤄지다 보면, 사이트의 소스는 점차적으로 꼬이기 시작한다. 같은 함수의 이름을 지닌 스크립트의 중복 사용이나, 불필요한 로딩, 소스 오류로 인한 페이지 오류 등의 문제는 초기에는 볼 수 없지만, 점차적으로 잦은 소스의 수정에 더 많은 사람들이 참여하게 됨으로써 소스가 복잡해지며 발생되는 문제이다.


 또한, 이러한 콘텐트의 입력은 대부분 전문 개발인력이 아닌, 콘텐트 작성을 담당하는 인력에 의해 이뤄지기 때문에 이미 복잡해진 페이지를 찾아서 그 오류를 수정 하기란 결코 쉬운 작업이 아닐 것이다. 이런 경우 개발자가 다시 소스를 수정하게 되는데, 문제는 이 소스의 결과를 보고 판단하기란 아주 고달픈 작업이다.


 이러한 경우 웹 관리자의 입장에서는 일단 웹 로그 분석을 시도할 것이다. 하지만, 웹 로그 분석을 할만한 시간적 여유는 주어지지 않으며, 이를 분석하기에는 너무나 많은 노력이 들어간다. 결국 경험에 의해 디버깅을 해야한다. 하지만, 이런 디버깅 시간을 대폭 줄이는데 도움이 되는 프로그램들이 많이 존재한다. 그 중에서 이번에 소개할 도구는 ‘HttpWatch’라는 프로그램으로 작고 단순하지만 웹 브라우저에서 각종 스트리밍을 모니터링할 수 있는 유용한 도구이다.



  

 웹 디버깅 도구인 ‘HttpWatch’‘Neumetrix’사의 상용 제품으로 유료 에디션(Professional Edition)과 일부 기능이 제한되어 있는 무료 에디션(Basic Edition)이 있다. 이 소개글에서는 ‘HttpWatch’의 주요기능들을 소개하기 위해 무료 버전인 Basic Edition을 사용하였으며, 유료 버전과의 차이점은 자동 기록 기능, 파일 내보내기(CSV, HAR, XML) 기능 등이 비활성화되어 있다. 제품 에디션 별 기능 비교는 아래와 같다.




 ‘HttpWatch’IE(Internet Explorer) 또는 FireFox와 같은 웹 브라우저에 추가하여 프로그램을 사용할 수 있으며, 웹 페이지에 액세스할 때 생성되는 HTTP HTTPS 트래픽을 디버깅할 수 있다. 또한 HTTPS의 경우 SSL 루트 인증서를 개인 키에 액세스할 수 있어 번거로움 없이 디버깅이 가능하다.


 ‘HttpWatch’의 설치 과정은 매우 간단하므로 생략한 후 이 프로그램에서 제공되는 주요기능들에 대해 소개한다. ‘HttpWatch’를 사용하기 위해선 독립적으로 프로그램을 실행시킬 수도 있지만 웹 브라우저에 추가하여 실시간 트래픽을 디버깅할 수 있다. 아래와 같이 IE를 실행시키고 [도구 > 추가기능관리] 탭에서 ‘HttpWatch Basic(Neumetrix Limited)’에 대해 추가 기능 사용설정을 마치게 되면 추가 기능탭에 ‘HttpWatch’가 나타나게 된다.

 



 추가 기능 탭에서 ‘HttpWatch’를 실행하면 [Record], [Stop], [Clear], [View], [Summary] 등의 버튼이 나타나게 되고 이 중 [Record] 버튼을 클릭하면 아래와 같이 웹 페이지에 대한 디버깅을 시작할 수 있다. 디버깅을 시작하게 되면 웹 페이지에 액세스하면서 발생되는 트래픽들에 대한 로그들이 나타나게 되며, 각 페이지 처리 시간과 Request(Post, Get), Header, Cookie 정보 등 시간대 별(Time Chart)로 발생된 트래픽에 대해서 분석할 수 있다.



 



또한, 트래픽 로그에 나타나는 URL정보들은 그룹화되어 비전문가라도 필요한 내용들을 쉽게 찾을 수 있다. 데이터의 내용을 정확히 이해할 수 없을 땐, 마우스 포인터를 데이터 제목에 가져다 대면 해당 데이터의 내용에 대한 힌트를 얻을 수도 있다. 그리고 발생된 트래픽 로그들에 대한 상세 정보들을 텍스트 파일(txt, csv)로 변형하여 내보내기(Export)하는 것이 가능하므로 이미 지나간 과거 로그에 대한 관리가 용이하다.




수 많은 데이터 중에 찾고자 하는 데이터가 있을 경우에는 검색탭을 이용하여 필요한 정보만 얻을 수 있으며, 필터링 기능을 통해서도 필요한 정보를 얻을 수 있다. 필터링은 데이터의 유형(text/html, text/css ), 상태코드(200,404 ), 헤더 등의 조건을 통해 필요한 데이터를 찾는 것이 가능하다.


 보통 이러한 웹 디버깅 도구는 개발자가 웹 어플리케이션 개발이 완료된 시점에서 웹 페이지의 상태를 점검하기 위해 사용한다. 특정 웹 페이지에서 500번과 같은 상태 코드가 나타날 경우 서버 장애가 일어났다는 것을 알 수 있기 때문에 해당 웹 페이지의 소스를 점검해야 한다. 이와 같은 장애 여부를 파악하는 것 뿐만 아니라 웹 페이지의 반응 속도를 측정하여 소스를 수정할 수 있다. 적절하지 않은 함수를 사용하여 특정 웹 페이지의 네트워크 비용에 대한 효율성이 떨어지는 경우 이를 확인하고 소스코드를 최적화하여 웹 서버의 가용성을 유지할 수 있다.


따라서 웹 서비스를 제공하는 관리자 또는 개발자의 경우 이와 같은 웹 디버깅 도구를 이용하여 웹 서버 내에 존재하는 불필요한 페이지들을 관리하고 웹 서버의 가용성을 침해하는 공격으로부터 예방하여 원활한 서비스를 제공할 수 있도록 하는 것이 바람직하다.

블로그 이미지

Diano.

http://www.diano.kr / 이사하는중 /

,