I. 분석 개요

 

분석 대상

OpenSSL Library 1.0.0l

문서 작성일

2014.04.11

문서 버전

V0.3

 

OpenSSL프로젝트는 정해진 규격의 네트워크 보안 프로토콜을 범용 라이브러리로 구현하기 위한 목적을 가지고 오픈소스 프로젝트로 시작하였으며, 현재 세계 개발자들이 유지보수에 참여하고 있다.

OpenSSL라이브러리는 OpenSSL 프로젝트의 결과물로써, 데이터 통신 사용되는 네트워크 암호화 프로토콜인 TLS(Transport Layer Security) SSL(Secure Sockets Layer)기능을 구현한 라이브러리이다.

이러한 OpenSSL라이브러리는 네트워크 보안 프로토콜에 사용되는 소프트웨어나 네트워크 하드웨어 장비 등에 사용되고 있는데, 라이브러리와 관련하여 지난 2014 4 8 “HeartBleed”라는 이름의 보안 취약점이 공개 되었다.

“HeartBleed” 취약점은 OpenSSL 라이브러리를 사용하는 서버와 통신 조작된 TLS 패킷 전송 과정을 적절하게 검증하지 않음으로 발생한다. SSL 사용한 네트워크 통신 과정에는 서버와 클라이언트 연결을 안정적으로 지속시키기 위해 연결 지속 신호를 주고 받도록 되어 있는HeartBeat라는 과정이 존재한다. 취약한 버전의OpenSSL 라이브러리는HeartBeat 통신 과정을 수행할 특정 변수의 경계 값을 적절히 검증하지 않으며, 이로 인해 서버 메모리 데이터가 노출되는 취약점이 존재한다.

해당 취약점을 통해 개인 , 비밀 키와 서비스를 이용 중인 사용자 세션의 획득이 가능하고 서버와 클라이언트의 암호화 트래픽을 통해 정보를 획득할 있다.

 

-      OpenSSL TLS heartbeat관련 URL

https://www.openssl.org/news/secadv_20140407.txt

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160

http://heartbleed.com/

https://bugzilla.redhat.com/show_bug.cgi?id=1084875

 

-      취약한 버전 정보

openssl:1.0.1f

openssl:1.0.1

openssl:1.0.1:beta1

openssl:1.0.1:beta2

openssl:1.0.1:beta3

openssl:1.0.1a

openssl:1.0.1b

openssl:1.0.1c

openssl:1.0.1d

openssl:1.0.1e

 

 

II. 대상 세부 분석

1.    Memory Read Overrun

“Heartbleed” 취약점은 OpenSSL라이브러리 TLS 패킷을 처리하는 과정 수행되는 tls1_process_heartbeat(), dtls1_process_heartbeat() 함수에서 payload 변수의 경계 값을 적절히 검증하지 않아 발생한다.

 

              

  

                                   [그림 1] d1_both.c 소스코드의 취약한 함수

 

 

 

 

 [그림 2] t1_lib.c 소스코드의 취약한 함수

 

 

TLS 패킷 처리 과정에서 payload값을 설정하여 서버에 요청 패킷을 보내면, 서버로 보내진 payload 값이 그대로 서버 응답 패킷에 포함되어 클라이언트로 전달된다.

공격자는 이러한 통신 과정 수행 payload 데이터는 명시하지 않고, 단순히payload 사이즈 값만을 조작한 패킷을 서버로 전송 있다. 서버는 payload사이즈 여부만 검증하여 payload 데이터 영역에 내부 특정 메모리 영역의 데이터를 복사하여 클라이언트로 응답 패킷을 보내게 되며, 공격자는 이에 따라 최대 64KB 임의의 데이터를 획득할 있다.

 

 

 

[그림 3] 조작된 TLS 패킷 전송

 

 

HeartBeat 허용 요청 패킷이 전송된 것을 모니터링 도구를 통해 확인 있다.

 

[그림 4] TLS 패킷 확인

 

 

클라이언트에서 HeartBeat 통신 과정 payload 사이즈 값을 조작하여 서버에 요청한다.

 

[그림 5] heartbeat 패킷 전송

 

 

취약점이 발생하는 부분을 OpenSSL 라이브러리의 소스코드를 참조하여 쉽게 알 수 있다.

 

[그림 6] tls1_process_heartbeat() 함수에 인자로 전달되는 SSL 구조체

 

 

 

[그림 7] SSL 구조체를 참조하는 과정과 취약점이 패치된 부분

 

해당 취약점을 근거로, 다음과 같은 테스트베드를 구축하여 취약점의 심각성을 재현하였다.

* 시나리오 : OpenSSL 구성된 Apache 서버의 사용자 권한 획득

* 서버 : Apache 2.2.15-29 + php 5.3.3 + openssl-1.0.1e-16

* 클라이언트 : Windows XP + Chrome 34.0.1847.116 m

 

사이트에 로그인 사용자의 화면이다. 

 

 

[그림 8] 로그인 된 사용자

 

 

로그인 사용자의 세션 정보이다.

 

[그림 9] 로그인 된 사용자 세션

 

조작된 heartbeat 패킷을 통해 서버의 특정 메모리 영역에 대한 데이터를 전달 받을 있다.

 

[그림 10] heartbeat 패킷 응답 값

 

 

다음과 같이 전달된 데이터를 통해 메모리에 저장된 로그인 사용자의 세션 정보 사용자 계정 정보를 확인할 있다.

[그림 11] 메모리에 저장된 사용자 세션 정보

 

 

 

2.    위험 분석

취약점에 노출 경우 악의적인 외부 사용자는 서비스 보안 장비, 또는 네트워크를 사용하는 사용자들에 대해 세션이나 개인키, 비밀 키에 대한 획득이 가능하다.

사용자 관리자의 세션이 탈취 경우, 홈페이지에 대한 위험이 발생할 있으며 나아가 서버 내부 네트워크 침투에 대한 위험을 초래할 있다.

 

취약점으로 인해 노출되는 위협에는 다음과 같은 사례들이 존재한다.

 

1. 포털 커뮤니티 사이트의 로그인 정보 유출

2. VPN 서버의 Private Key 유출

3. 네트워크 장비 보안 장비의 Private Key 로그인 정보 유출

4. 취약한 OpenSSL 라이브러리로 구성되어 통신하고 있는 애플리케이션의 로그인 정보 유출

 

 

  해당 취약점은 특정 OS 환경에 국한되는 취약점이 아닌 OpenSSL 라이브러리를 사용하고 있는 VPN 라우터와 같은 네트워크 장비나 하드웨어 보안장비에도 영향을 미칠 있음.

 

 

III. 대응 방안

1.    Memory Read Overrun

1.    OpenSSL 업데이트

OpenSSL 공식 홈페이지를 통해 패치 버전으로 업데이트 있도록 권고함.

 

2.    OpenSSL 컴파일

OpenSSL 업데이트 불가피할 경우, 소스코드를 "-D OPENSSL_NO_HEARTBEAT" 통해 컴파일 있도록 권고함.

 

 

 

※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.

 

저작자 표시 비영리 변경 금지
신고

모바일 모의해킹 프로젝트 수행 중 안드로이드 메모리에 민감한 정보 평문 저장여부를 확인하기 위해 필요한 어플리케이션을 제작하였습니다. 점검 시 유용하게 사용하시길 바라며 아래와 같이 공유합니다.


버전: beta

빌드날짜: 2013. 9. 11

파일크기: 258KB

MD5: d0736e78ec7affb0ab5d89aca233fcd8


Memory_Dump.apk



사용법

 

해당 어플리케이션을 사용하기 위해서는 우선적으로 루팅되어 있는 스마트폰에서 실행해야 합니다. 


제작 당시 jni로 구성하지 않고 binary execute로 제작하여 어플리케이션 실행시 지속적으로 권한을 요청하는 단점이 있습니다.

superuser 어플리케이션에서 설정 > 보안 > 자동응답 > 허가 로 변경하여 사용하면 자동으로 권한을 부여 받아 사용할 수 있습니다.


    

<그림1> 루트권한 요청 변경




   

<그림2> 자동응답 설정 변경



위와 같이 루트권한을 설정 후 첨부된 어플리케이션을 설치 후 실행합니다.


   

<그림3> 어플리케이션 실행





Attach 버튼을 눌러 실행중인 프로세스에 Attach 합니다.


   

<그림4> 프로세스 Attach




Maps 버튼을 누른 후 덤프할 메모리 영역을 선택합니다.


    

<그림5> 덤프할 메모리 영역 선택



덤프 전 선택된 메모리 영역을 메모리 뷰 버튼을 통해 볼 수 있습니다.


<그림6> 선택된 영역 메모리 뷰



메모리 덤프된 파일이 저장될 위치를 선택합니다. 현재 에러로 새폴더가 생성되지 않습니다. 추후에 수정예정입니다.


   

<그림7> 덤프 후 저장될 디렉터리 경로 설정



디렉터리 선택 후 Memory Dump 버튼을 눌러 덤프를 실행 합니다.


   

<그림8> 선택된 디렉터리에 덤프파일 저장




저장된 파일은 선택된 폴더에 PID_시작주소-끝주소 형식으로 저장됩니다.

해당 파일을 PC에서 다운로드로 핵사에디터로 확인합니다.


<그림9> 덤프파일 확인




메모리 영역에 문자열 검색을 위해 테스트 어플리케이션을 생성하여 살펴보겠습니다.


   

<그림10> 테스트 어플리케이션 실행




Attach 버튼을 눌러 PID를 선택 후 Maps 버튼을 눌러 덤프 주소값을 설정합니다.

이때, RW Select  버튼을 눌러 쓰기권한이 존재하는 부분만 선택하여 해당 주소의 메모리 값을 덤프합니다.


    

<그림11> PID, 주소값 선택




저장될 폴더를 선택후 Memory Dump 버튼을 눌러 메모리 덤프를 합니다.

해당 테스트 어플은 75메가 정도의 크기 덤프파일이 생성되었으며 2~3분 정도 시간이 경과된 후 완료 되었습니다.




    

<그림12> 메모리 덤프파일 생성



저장된 파일을 PC에 옮겨 살펴봅니다.


<그림13> 덤프파일 생성 확인





grep 명령어를 이용하여 파일들의 문자열을 검색합니다.


<그림14> 문자열 검색


7744_0000b000-00252000 파일에 검색된 문자열이 존재하는 것을 확인 할 수 있습니다.

핵사 에디터로 메모리 영역에 저장되어 있는 문자열을 확인 할 수 있습니다.

<그림15> 문자열 확인



메모리 덤프 시 새로운 어플리케이션 메모리 덤프할 경우 어플리케이션을 종료후 다시 실행해야 에러나지 않습니다.

주소 받아오는 부분에서 새로운 PID 선택시 배열을 초기화하지 않해서 그런듯 싶습니다. 추가적으로 시간이 주어진다면 개선하여 블로그에 올리도록 하겠습니다.


어플이 허접하다며 아이콘 만들어준 하모군에게 감사하며(흰화면에 기본아이콘이였음) 포스팅을 마치겠습니다.

감사합니다.






저작자 표시 비영리 변경 금지
신고

날씨가 점점 더워지고 있습니다~

요즘 사무실 내부에서는 에어컨을 풀가동 시키고 있네요.

날씨도 더운데 일하랴 개인연구 하랴 바쁜 가운데 2013년 상반기의 TeamCR@K 내부 활동 정리해 보았습니다~


2013년 상반기에는 각종 프로젝트가 끊이지 않아서 개인 연구나 기타 공동 연구작업이 원활치 않았습니다.

그 와중에도 개인시간을 내어 버그헌팅을 하고 exploit 제작을 하거나, 프로젝트에 투입 중간에도 솔루션의 취약점을 찾아 0day exploit을 만든적도 있었습니다.


다음은 저희 TeamCR@K에서 금년 2013년 상반기 버그헌팅 및 0day exploit 작성과 관련한 내역을 정리한 것입니다.


Date 

Exploit Name 

Classification 

 Summary

 2013.02.22

 DoubleQuarterPounderCheese-130222.c

 0day

 Buffalo TeraStation TS5800D Command Injection Vulnerability Exploit

 2013.05.24

 XE-LFI-1day_fr33p13.py

 1day

 Zeroboard XE Local File Inclusion Vulnerability (From KISA, 2013.05.13)

 2013.05.31

 ********-insecure_file_creation.pl

 0day

 Local root exploit ${PROTECTED_COMMAND} command in ${PROTECTED_SOLUTION}

 2013.05.31

 ********-symlink_follow.sh

 0day

 Local root exploit ${PROTECTED_COMMAND} command in ${PROTECTED_SOLUTION}

 2013.06.10

 hurse.sh

 0day

 Remote Command execution exploit ${PROTECTED_COMMAND} in ${PROTECTED_SOLUTION}

 2013.06.11

 -

 0day

 Buffalo TeraStation TS5800D Remote Command Execution Vulnerability


* Buffalo TeraStation TS5800D Command Injection Vulnerability Exploit


Buffalo에서 만든 TeraStation이라는 NAS 서버에서 취약점을 발견하여 이를 자동화 하는 exploit을 구현했었습니다.

NAS라는 내부장비에서 root 권한의 명령어를 실행 할 수 있는 취약점으로 버그헌팅 당시 NAS 솔루션의 외부 침입 위험을 진단하는 관점보다는 스마트폰의 Jail Break와 같은 관점으로 버그헌팅을 시작했었습니다.


exploit 이름이 DoubleQuarterPounderCheese.c 인 이유는 exploit 작성 당시.. 야식으로 맥**드의 버거를 먹었다는 후문이... ^^;


본 취약점과 관련해서는 다음 URL에서 상세한 내용을 확인 할 수 있습니다.


http://teamcrak.tistory.com/365


* Zeroboard XE Local File Inclusion Vulnerability (From KISA, 2013.05.13)


2013년 5월 13일 KISA 홈페이지를 통해 Zeroboard XE 관련 LFI 취약점에 대해 패치권고가 올라왔었습니다.

당시 TeamCR@K 김모군(fr33p13)은 패치된 코드를 디핑하여 취약점 내용을 구현하는 테스트를 진행했었습니다.

어찌어찌해서 웹 쉘을 올리는 코드가 실행되고 이에 대해 파이썬으로 자동화 exploit을 구현까지 했었네요.


본 취약점과 관련해서는 다음 URL에서 상세한 내용을 확인 할 수 있습니다.


http://teamcrak.tistory.com/369


* Multiple Vulnerabilities in SOLUTION


본 내용은 모의해킹 수행 중 발견한 솔루션 0day 취약점으로 Local privilege escalation 취약점 2종과 Remote command execution 취약점 1종을 발견하고, 이와 관련하여 exploit을 작성 및 별도의 보고서를 고객사로 송부하였습니다.





원격명령실행 취약점과 관련한 exploit은 초기 이름이 hurse.sh 였는데..

동일 프로젝트에 소속된 정모군과 박모군이 이미 권한상승취약점에 대한 exploit을 작성하고 난 이후..

정모군曰 "오! 이거 될 것 같다. 오늘 내가 이거 원격 명령 실행 취약점 나오면 exploit한다"고 했더니..

이 말을 들은 박모군이 이랬답니다.



허세 작렬! 허세 작렬! 허세 작렬! 허세 작렬! 허세 작렬!


...

그 말에 빡친 정모군은 후일 hurse.sh라고 이름 붙인 exploit을 팀원 모두에게 공유했는데 나중에 박모군은 "허세 아닌 패기"라며 발뺌했다고 하네요!


Unix/Linux 서버용 daemon을 만들고 이를 유지보수 할 때에는 여러모로 보안에 신경써야 하는 부분이 많습니다.

특히 Port를 열고 통신을 하는 daemon의 경우 보안취약점이 존재할 경우 해당 취약점을 자동으로 공격하는 스크립트로 대량의 서버접근권한을 탈취당할 수 있고 이런 서버들은 불법적인 공격에 이용당할 수 있습니다.

솔루션의 경우에는 정식 빌드 이전이나 정식 서비스 오픈 이전, 이러한 보안취약점들을 사전에 차단할 수 있도록 보안성검토와 같은 작업을 통해 보안취약점들을 걸러낼 수 있습니다.


* Buffalo TeraStation TS5800D Remote Command Execution Vulnerability


해당 취약점은 아직 exploit까지는 만들어지지 않았지만 SSL 통신을 하는 NAS의 특정 바이너리 형태를 그대로 소스코드로 복원하여 root 권한의 명령어를 실행시킬 수 있는 취약점이라고 합니다. 자세한 사항은 추후 exploit을 작성 한 후 블로그에 올리도록 하겠습니다.


프로젝트로 심신이 고달픈 가운데 개인연구에 힘 쓰는 TeamCR@K 멤버들이 있네요.

날씨도 더운데 몸 상하지 않게 오래오래 같이 연구했으면 좋겠습니다~

저작자 표시 비영리 변경 금지
신고

Online Analyzers 

Sandroid : http://sanddroid.xjtu.edu.cn/

 

Sandroid는 온라인을 이용한 안드로이드 APK 파일 분석을 해주는 사이트로 APK 파일 업로드 안에 정적 동적 분석 보고서를 리포트해 줍니다.


정적 분석 항목

· 권한 분석(Permission Analysis)

· 구성 요소 분석(Component Analysis)

· 악성 코드 탐지(Malware Detection)

· 카테고리별 분류(Classification Analysis)


동적 분석 항목

· 응용프로그램이 실행되는 동안 파일 작업, 네트워크 행동, 개인정보 노출 등의 동적 행동들을 모니터링하여 분석

 

1. Sandroid를 이용한 APK 파일 분석


분석할 안드로이드 APK 파일을 추출하여 Sandroid 웹 페이지(http://sanddroid.xjtu.edu.cn/)를 통해 해당 파일을 업로드 시도합니다. 분석 결과를 메일로 받기 위해서 메일 주소를 포함시킵니다.

[그림 1] 분석할 APK 파일 업로드

 


파일 업로드 완료 , 완료 메시지를 확인 가능하며 FileMD5 값을 확인할 있습니다.

[그림 2] 업로드 성공 확인

 


, 분석 결과 URL 포함한 메일을 수신할 있습니다.

[그림 3] 분석 결과 URL 확인

 


분석 결과를 통해 일반적인 정보의 확인과 정적 동석 분석 결과를 확인할 있습니다.

[그림 4] 일반적인 정보 정적, 동적 분석 결과 확인

 


정적 분석 항목 Activity Services 정보, 권한 분석(Permission Analysis) 등을 확인할 있습니다.

[그림 5] Activity Services 정보, 권한 분석 확인

 


권한 분석(Permission Analysis) 경우 APK 파일을 apktool 이용한 Decoding , AndroidManifest.xml 파일 상의 권한 확인 결과 동일함을 확인할 있습니다.

[그림 6] AndroidManifest.xml 권한 확인

 


사용중인 API 정보, 포함하고 있는 URL 정보 등을 확인할 있습니다.

[그림 7] API, URL 정보 확인



API 포함하는 URL 경우 dex2jar 이용한 .dex 파일의 .jar 파일로의 변환 jd-gui 이용한 .jar 파일의 .class 파일을 .java Decompile 결과 동일한 URL 찾을 있음을 확인할 있습니다.

[그림 8] Decompile URL 정보 확인

 

Sandroid에서 지원하는 분석 항목 모바일 어플리케이션 점검 기준이 되는 권한 분석을 통한 불필요한 권한 부여 여부, 중요 정보 노출과 관련해 특정 문자열 검증 부분을 지원해 줌 확인 가능합니다. 또한, Activity, Services, 사용중인 API 정보를 통해 해당 APK 파일 분석에 있어 유용한 정보를 가져올 있습니다.

 


2. Online Analyzers 사이트


·  AMAT (http://dunkelheit.com.br/amat/analysis/index_en.php)

·  Anadroid (http://pegasus.cs.utah.edu:8080/) - static analysis

·  AndroTotal (http://andrototal.org/) - AV scanning

·  Comdroid (http://www.comdroid.org/)

·  CopperDroid (http://copperdroid.isg.rhul.ac.uk/copperdroid)

·  Dexter (https://dexter.bluebox.com/) - static analysis

·  Mobile-Sandbox23 (http://mobile-sandbox.com)

·  Stowaway http://www.android-permissions.org/

·  App360scan http://www.app360scan.com/

 


3. 참고 자료


·  http://ashishb.net/security/android-security-related-tools/

저작자 표시 비영리 변경 금지
신고

TeamCr@k 전원이 지난 주말

2013.1차 M.T project '관악산' 나들이를 다녀왔습니다.

 

신림 휴먼시아아파트 -> 안양유원지 약 6km정도의 산행이었습니다.

군시절 40km FM 군장 코스에 비하면 가벼운 런닝코스 일뿐이지만,

오랫만에 하는 운동으로 인해 지난 일요일은 

팀원 모두 근육통에 시달렸다는 잔혹한 이야기가 .......... 

(참고로 저는 인제 원통에서 군생활 했습니다. 부대 뒷산(625m)도 가볍게 뛰어다니던 ....그런 리즈 시절이...)

 

아직 2013.2차 M.T project 의 장소는 미정입니다.

좋은 곳 알고 계신분은 연락바랍니다.

 

사진 설명: 이번 산행의 유일한 깔딱 코스 돌파 후 상무님께서 등산코스에 대한 브리핑 중입니다.

 

 

사진 설명: 너무 즐거워 주먹을 불끈 쥐고 휴식을 취하는 박대리~

 

 

사진 설명: 이번 산행을 제일 즐겁게 다녀온 '간헐적 단식' 현기입니다. 지치지도 않는지 깔딱 코스도  가볍게 통과~

 

 

 사진 설명: 휴식중인 정대근 팀장입니다. 팔의 각도로 보아 많이 지쳐 있는 것을 확인할 수 있습니다.

 

 

사진설명 : 안양유원지 밥집에서 밥시켜 놓고 찍은 사진입니다. 사진 촬영 후 닭볶음탕과 묵 그리고 막걸리 아주 맛있게 먹었습니다.

 

 

이것으로 2013.1차 M.T project 관악산 나들이 프로젝트 리뷰를 종료하며, 

 

함께한 대장님과 TeamCr@k 팀원 모두 고하셨습니다.

 

 

 

 

 

 

저작자 표시 비영리 변경 금지
신고


 

티스토리 툴바