최근 Webkit 프로젝트의 Javascript Engine 파트 Javascript Core 의 Race condition 버그를 찾게되었는데요!

 

아는분의 도움을 받아 RIP Controll 에 성공했습니다. YAY~~~

 

물론 리서치 도중에 패치되어 Report 까지는 이어지지는 못했습니다 ㅠ-ㅠ 세상의 슈퍼 짱짱짱 쩌는 해커들이 너무 많아서 힘들어요..

 

https://github.com/sweetchipsw/vulnerability/tree/master/Apple/JavascriptCore

 

sweetchipsw/vulnerability

Contribute to sweetchipsw/vulnerability development by creating an account on GitHub.

github.com

(Repository 스타와 팔로우 부탁드립니다.. 허헣)

 

그리고.. 더 얼마전에 해당 취약점 POC를 Github에 공개하게 되었습니다. (Exploit은 작성되었고 버전 정보 및 조건들은 조만간 새로운 블로그에 Write-up과 함께 동시에 업데이트 할 예정입니다)

 

이렇게 굳이 버그에 대한 예고(?) 글까지 쓰게 되는 이유는.. 개인적으로 원래 4월에 포스팅을 하는걸 목표로 했으나 게으름과 회사생활의 연속.. + 놀고먹기 등의 갖가지 핑계로 인하여 포스팅 일정이 무기한 연기가 계속되어 얼른.. 끝내버리고 싶은 마음에 올리게 되었습니다..

 

또 한가지 소식은.. 영어 쓰기 공부도 좀 하고 블로그를 글로벌 하게 운영하고 싶은 마음에 영문 블로그를 새로 만들게 되었습니다.

 

아무래도 영어로 좀 공을 들여 쓰다보니 글을 쓰는데 피로도가 x2배 기도 해서 느려지는것 같습니다.

 

새로운 블로그 주소는 https://bughunting.io/ 인데요! 나름 레어 도메인을 먹게 되었습니다!

 

앞으로 개인적으로 공부했지만 그중에서도 조금 더 '열심히' 공부 또는 연구했던 내용은 저 블로그에 '영문' 으로 올라갈 예정입니다.

 

그도안 안다녔던 회사를 다시 다니게 되면서 체력이 딸린다는 핑계로 그동안 개인 연구를 많이 못했지만... 그동안의 게으름을 반성하고 차차 다시 개인적인 연구를 진행하고 싶네요..

 

뜬금없지만 회사 다니면서 새벽에 연구 하시는분들 리스펙!

 

다음글은 새로운 글을 작성한 이후에 찾아뵙도록 하겠습니다.



드디어.. 우리 동아리 SSG에서 빵빵빵 세미나 라는 자리에서 sweetmon 을 공개하고 Github에 공식적으로 릴리즈했습니다.


상세한 설명은 아래 sweetmon 주소를 참고해주시고..


첫번째 오픈소스 프로젝트라서 부족한 점이 많습니다.. (버그도 오늘 시연도중에 하나 발견했네요 ㅋㅋㅋ)


그리고 생각보다 버그가 많아서.. 하나하나 수정할 예정입니다.. ;ㅅ;


PEP 코딩 컨벤션도 지키지 않아서 개발자 분이 본다면 경악하실 수도 있겠습니다만.. (원래 혼자 쓰려고 했다는 말로 핑계를 대봅니다.. ;ㅅ;)


그래도.. 다시한번 sweetmon 을 소개해드리면


sweetmon은 Fuzz tester 들을 위해서 제작된 퍼져 및 크래시 모니터링 서비스로 다수의 VM에서 퍼징을 할 때 간단한 코딩으로 쉽게 크래시를 한 서버로 모아주고 알림해주는 서비스입니다.


코드는 모두 오픈소스이며, MIT 라이센스를 적용하였습니다.


프로젝트 및 디테일은 아래 링크에서 확인하실 수 있습니다.


https://github.com/sweetchipsw/sweetmon


https://github.com/sweetchipsw/sweetmon_client


버그 및 건의는 Issue 또는 Pull Request를 이용해주세요~



오랜만의 포스팅!


퍼져 모니터링 시스템인 sweetmon의 개발 상황을 메모 해두고자 오랜만에 포스팅 합니다!


우선 sweetmon 제가 Fuzzing 연구를 할때 다수의 VM에서 퍼징을 돌리곤 합니다.


그럴때마다 크래시가 새로 나올때마다 VM 하나하나 들여다보면서 나왔나 안나왔나.. 보는게 좀 많이 귀찮아서 그냥 한곳으로 파일을 쏴주는 스크립트를 제작하곤 했습니다.


하지만 귀찮음으로 인하여 계속 버그도 생기고 문제가 자주 발생해서 아예 (이전 보다는) 제대로 한곳으로 크래시를 모아주는 것을 만들어보자! 라고 해서 시작한 프로젝트가 sweetmon입니다.


그래서 기반 언어는 멀티플랫폼을 지원하는 Python을 선택했고 Django 프레임워크를 이용하여 개발했습니다.


프론트는 부트스트랩 템플릿인 Dashgum Free버전을 이용하여 개발했습니다!


현재는 잠시 퍼징 연구를 멈춰서 개발을 중단했다가 잉여한 방학생활을 의미있게 보내기 위해서 다시 개발을 시작했습니다.


그리하여.. 기능도 하나 둘 추가로 생기고 있습니다.



우선 현재 돌아가고 있는 각 Fuzzer의 상태를 모니터링 할 수 있고! (Fuzzer에서 웹 서버에 Ping을 때리면 돌고 있는 상태로 간주합니다)


몇개의 크래시가 나왔는지, 몇개의 테스트케이스가 돌았는지(이거는 사라질 수도 있는 기능..)을 모니터링 할 수 있습니다.


그리고 IDX옆에 있는 버튼을 누르면 Fuzzer의 IP, 타겟, 운영체제 등을 상세하게 볼 수 있습니다.



그리고 크래시의 목록들..


32번 ~ 35번을 보시면 됩니다!


각 크래시는 어떤 퍼져에서 나왔는지, 어떤 타겟이고 언제, 몇개의 동일한 크래시가 나왔는지 볼수 있습니다.



그리고 크래시 정보에 들어가면 이름, 리포트된 날짜, 타겟, 퍼져, 로그(로그는 퍼져가 직접 서버로 쏴줘야 합니다), 해시, 크기 등을 볼 수 있습니다.


아 그리고 간단하게 코멘트를 달 수 있는 기능도 있군요.


그리고.. 크래시 샘플을 다운로드 받을 수 있도록 다운로드 기능과 다른 사람에게 크래시를 공유하고 싶다면 1회용 링크를 생성해서 공유할 수 있습니다.


또한 중복된 크래시 샘플의 리스트를 쭉 볼수 있습니다. (가끔 퍼징을 하다보면 중복 크래시가 많이 나올때 최대한 작은 샘플을 구하고 싶을때가 있죠?)




그외 여러 기능들이 있지만 아직은 완성되지 않은 기능들이고..


일단 완성된 것들을 알려드리면


텔레그램 및 이메일 알림기능을 추가했고 유저가 쉽게 켜고 끌 수 있습니다. (전송 테스트도 가능해요!)


또한 싱글 유저에서 여러명이 사용 가능한 멀티 유저로 코드를 갈아 엎었고..


sweetmon과 개발자 정보도 넣었습니다. (추후에 오픈소스로 공개시 도움이 된 분들은 비트코인으로 Dontation을.. 읍읍..)



그리고 사진에 있지 않은 기능들은..

 - 제보한 취약점에 대해서 메모할 수 있는 기능

 - sweetmon-client 와 그나마 쉽게 연동 가능하도록 퍼져의 정보를 한번 등록해두면 자동으로 설정정보를 생성해주는...?

 - 메인 메뉴의 통계.. (매우 허접하여 없어질 가능성이 큼)

 - Fuzzer 등록 관리, 크래시 및 로그 전송, 핑 체크 등 퍼져와 연결할 수 있는 기능들


앞으로 개발 할 내용은..

 - 유저간 크래시를 공유

 - 크래시 암호화?

 - 기타 잡다한 기능들


등등이 있겠습니다.


그리고 지난번에 잠깐 언급한 sweetmon-client 는 웹 서버와 본인의 퍼져를 쉽게 연결할 수 있고 확장성을 고려하여 프레임워크같이 제작했습니다.


install.py를 실행하면 서버와 연결할 수 있는 정보가 생성되는데 이떄 제 유저 토큰을 입력하면 퍼져 리스트에 올라오도록 합니다.


(사진 재탕)


바로 7번 처럼 올라오게 되고


아래 코드를 이용하여 핑체크 및 크래시, 로그 전송이 가능합니다.


from sweetmon import *


F = Fuzzer(FUZZERINFO)

print("TEST PING", F.Ping())

print("TEST UPLOAD", F.Upload("test title", "here\nis_l0g", "/tmp/crashsample"))

print("END OF TEST..")


이렇게 업로드된 크래시는 


( 또 재탕)


이렇게 서버에서 확인할 수 있게 됩니다.


나머지 기능은 또 귀찮음으로 인해 언제 개발이 될지는 모르겠네요..


언젠가 제 첫번째 오픈소스 프로젝트가 되면 좋겠습니다 후후


끝!


요즘 한창 개발중인 프로젝트 sweetmon 입니다.


sweetmon 은 제 닉네임 sweetchip 과 monitor 가 합쳐져서 그냥 퍼져와 크래시를 모니터링 한다는 의미로


재미로 만들고 있는 프로젝트 입니다.



원래 이번이 처음은 아니었고 예전 브라우저 버그헌팅시 여러 VM에서 퍼져를 돌리고 한곳으로 모을때 잠시 php 버전으로 만들었는데


너무 귀찮아서 중간에 때려쳤다가 다시 퍼징할 일이 생기기를 몇번을 반복하다 보니


그때마다 편의를 위해 계속 크래시를 한곳으로 모아주는 것을 만들어야 하는 일이 있었습니다.


이번에도 그런 일이 있어서 그냥 이참에 하나 다시 만들자라고 생각해서 같은 동아리 부원인 @shc 의 추천으로 Django 를 접하게 되었습니다.



웹 개발이라고는 PHP와 HTML로 살짝 건드려본 적 밖에 없어서 웹 개발쪽 시야가 좁았던 저에게는


장고 라고 하는 프레임워크를 다루다보니 엄청난 신세계였습니다.


PHP보다 개발이 훨씬 간단하고 코드의 양도 확실히 줄면서 재미를 붙이다보니 기능도 계속 넣게되고..


지금까지 오게 되었네요. 




이번 포스팅의 사진은 거의 모자이크밖에 없지만..


실제로 돌리고 있는 모습입니다.


웹서버(Python+Django+Apache) 에서는 Fuzzer와 Machine / Crash들의 정보를 받아와서 저장하고 뿌려주는 API를 제공해줍니다.


예를들어 server.com/fuzz/crash 는 크래시가 발생했을 경우 업로드 기능을 지원합니다.


이외에 현재 제보했던 버그 리스트를 저장할 수 있도록 간단한 메모 기능을 만들었습니다.



기능을 간단히 정리해보면..


퍼져 및 머신의 정보 출력 / 크래시 업로드 및 업로드 된 크래시 리스팅 및 정보 출력 + 1회용 다운로드 링크

Fuzzer 업로드/다운로드 기능, Testcase 업로드/다운로드 기능

리포팅한 버그들 메모 기능

새로운 크래시 텔레그램 및 이메일 알림 기능


등이 있겠네요.


상세한 기능들은 나중에 다시 정리 하는걸로 하고..


아무튼 sweetmon 을 만들게 된 계기는 윈도우에서든 리눅스에서든 맥에서든 어디서든지 어떤것을 퍼징을 하든


한곳으로 잘 모아주는 것을 원했습니다.


그래서 본인이 만든 퍼져나 AFL같은 퍼져등을 이용해도 sweetmon을 이용할 수 있도록 만드려고 노력하는 중입니다.


하지만 제가 개발 경험이 그리 많지는 않아서 쉽지만은 않네요.






서버가 있으면 클라이언트도 있어야겠죠?


클라이언트는 Python 언어를 기반으로 서버에서 제공하는 API들을 래핑하여 쉽게 사용할 수 있도록 제공할 예정입니다.


현재 목표 코드는 sweetmon.py 및 config.py 만 나눠주고 그것을 이용해서 본인의 퍼져에 맞출 수 있도록 하는 것이 목적입니다.


그냥 퍼징 프레임워크라고 보시면 됩니다.


아래 예제 코드를 보시면..


from sweetmon import *


count = 0

F = Fuzzer(fConfig)

while 1:

if count % 1000 == 0:

F.ping() # 서버에 핑 날림

log = run("windbg ... ... ./fuzzer.exe") # windbg에서 생성된 로그파일 받아옴

if CheckCrash(log) == True: # CheckCrash 는 로그에서 크래시가 발생했는지 여부를 체크해주는 함수

F.upload("0023:41414141=????????", "./testcase1234.log", "./testcase1234.file") # 서버에 Title 과 크래시 로그 업로드.

count += 1




위는 제가 대략 생각하고 있는 것인데..


만약 직접 만든 Fuzzer든 AFL같은 퍼져를 이용하든 로그파일을 분석하는건 모든 퍼져마다 다른건 당연하니


퍼져 돌리는 함수 / 크래시인지 아닌지 판별하는 함수등은 각각 알아서 제작 하도록 합니다.


클라이언트에서 제공해 주는 것은 핑 날리기 / 파일 업로드 (Title, 크래시 로그, 크래시파일) 등 서버와 통신에 필요한 기능만 제공합니다.


그래서 어느 운영체제에서든 python만 지원되는 환경일때 각 퍼져에 맞게 간단한 코딩만 해주면 퍼져 및 크래시를 서버에서 모니터링을 할수 있게 됩니다.




추후엔 암호화 기능도 넣고 여러 유저가 크래시를 공유하는 기능도 만들고 지금 있는 버그도 고치고 여러가지 할게 많네요.


제가 주로 쓸 용도로 만드는 것이긴 하지만 오픈소스로 공개할 예정도 있습니다. (물론 쓸 사람이 있을진 모르겠지만요.. ㅠ)


하지만 언제가 될진 모르겠네요 ㅋㅋ


시험기간에 심심해서(!?) 오랜만에 적어봤습니다.

'0x10 정보보안 > 0x11 security' 카테고리의 다른 글

sweetmon 릴리즈!  (4) 2017.09.23
sweetmon 진전 상황  (5) 2017.08.16
GITHUB 업데이트 완료!  (0) 2017.04.04
무료 SSL 인증서 발급 받기 (letsencrypt)  (0) 2017.02.02
MSRC Top 100 선정!  (5) 2015.08.16

1월 포스팅을 하면서 올해는 정보공유좀 해야지 하고 다짐[?] 했던 것이 생각나서 처음으로 깃헙을 업데이트 했습니다.


이번에 공개한건.. 작년 6월쯤에 애플에 제보했던 Rootless bypass 취약점과 2015년 Codegate 에서 출제한 두가지 문제(Bookstore, Bookstore2)의 소스코드를 공유했습니다.


SSG CTF를 준비하면서 CTF문제를 처음 출제하는 친구들에게만 공유 하려다가 그냥 묵혀두면 뭐하나 해서 전체 공유를 하기로 했습니다.


앞으로 취약점레포에는 올릴수 있는 취약점의 POC코드를 공개할 예정이고.. (가능하려나...)


그리고 예전에 출제한 다른 CTF들의 문제도 공개할 예정입니더.


https://github.com/sweetchipsw

얼마전에 SSL 인증서를 사용해야 할 일이 있어서 정보를 찾던 중 letsencrypt 라는 것이 있다고 한다.


자세한 정보는 아래 링크에서 확인 하자.


https://letsencrypt.org/


설치는 우분투 기준으로 apt 로 가능하다.


apt install letsencrypt


하면 설치가 끝난 것이고


sudo letsencrypt certonly -a standalone -d domain.com


를 입력하면 인증서가 만들어진다.


self-signed가 아니라서 빨간 자물쇠도 아니다!


*참고로 80번 포트를 사용하므로 웹서버등의 80번 포트를 사용하는 프로그램은 잠시 닫아줘야 한다.


IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at

   /etc/letsencrypt/live/domain.com/fullchain.pem. Your

   cert will expire on 2017-mm-dd. To obtain a new version of the

   certificate in the future, simply run Let's Encrypt again.

 - If you like Let's Encrypt, please consider supporting our work by:


   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

   Donating to EFF:                    https://eff.org/donate-le


위와같이 안내가 나오고 후원등의 정보가 나온다.

$ sudo ls /etc/letsencrypt/live/domain/

cert.pem  chain.pem  fullchain.pem  privkey.pem



아파치 설정의 SSL 설정은 아래와 같이 하자

                SSLCertificateFile      /etc/letsencrypt/live/domain.com/cert.pem

                SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem

                SSLCertificateChainFile /etc/letsencrypt/live/domain.com/chain.pem


인증서 기간이 90일로 짧은 편이긴 한데 명령어 몇개로 간단하게 갱신이 가능하다고 한다.


무료에 crontab 등으로 일정 기간마다 갱신하게 하면 편할 것 같다.


원래 startssl을 이용하기도 했었는데 이건 명령어 몇개만 입력하면 인증서가 만들어져서 훨씬 편하다!


참고로 갱신하는 명령어는 아래 명령어로 끝난다.


[root@localhost ~]$ service apache2 stop

[root@localhost ~]$ letsencrypt renew


SSL 인증서 설정을 위와 같이 live 디렉터리에 했다면 심볼릭링크로 새로운 인증서로 자동으로 연결되므로 경로를 바꾸거나 하지 않아도 좋다.







얼마전 Blackhat 컨퍼런스에서 블랙햇 후원사인 MS가 회사부스에 위와 같은 내역을 공개했다고 합니다.


전 세계의 MS의 보안 취약점을 제보한 해커 TOP 100명을 선정한 결과라고 알고 있는데 그중 91위에 오르게 되었네요.


사실 1~30위 정도 사람들의 이름을 보니 사실상 MS의 보안취약점을 없애는데 하드캐리 하고 있는 분들이라서 아직은 넘사벽인 것 같네요.


이번엔 라스베가스를 갈 일이 없어서 인터넷으로나마 소식을 접하던 와중에 블랙햇 컨퍼런스 첫날부터 1~50위에 본인의 이름이 올랐다는 트위터 소식을 여러개 보긴 했으나


51~100위 리스트가 한번에 있는 사진은 아예 없더군요.. 심지어 75위까지 올라간 사진이 있어서 살짝 기대했는데 역시나 없더군요 ㅠㅠ (하지만 75위까지 사람들 이름을 보니 그럴만도 합니다 ㅋㅋ 유명한 사람들이 많죠)


하지만 어제 100위까지 있는 사진이 다시 끌올[?] 되어서 작은 기대를 가지고 봤더니 찾을 수 있었습니다.


비록 끝자락인 91위지만 그냥 단순히 이름이 올라갔다는 것에 대해서는 매우 만족하고 있습니다. ㅋㅋ


얼마전 MS에서 VIP dinner의 제목으로 메일이 왔었는데 아마 이것에 영향을 받지 않았나 합니다. (아니면 버그를 제보해준 사람에게 모두 돌린 메일 일지도?)


하지만 전제조건이 블랙햇이 끝나는 날 라스베가스에서 저녁 사줄게! 라는 내용이어서..; 아쉽게도 다음 기회로 넘기게 되었습니다.


어쨋든 버그헌팅에서 예상치도 못한 성과가 나오다 보니 요즘 이상한 버그들만 나와서 금이 갔던 멘탈을 조금이나마 위로 해주는 느낌이네요.


비록 낮은 순위지만 앞으로 버그헌팅을 열심히 해야겠다는 의미로 다시 열라 해야겠네요. ㅋㅋ






발표자료는 아래에서 받을 수 있습니다.


생각보다 하고 싶은 말을 많이 못한것 같네요..


항상 발표할때 습관인 초반에 긴장때문에 말도 더듬더듬 하기도 했는데 도움이 되셨으면 합니다.


의문점이 있는것은 덧글로 달아주시면 감사하겠습니다


http://cloud.sweetchip.kr/speak/Inc0gnito_fuzzing_for_fun_sweetchip.pdf


http://www.slideshare.net/sweetchip/inc0gnito-fuzzing-forfunsweetchip


감사합니다.





+ Recent posts