Tools Repository

Angr 란?

ch4rli3kop 2018. 1. 14. 17:27
반응형

Angr 는 python 기반의 바이너리 분석 프레임워크입니다. 정적, 동적으로 "Concolic" 분석을 사용해서 다양한 곳에 사용할 수 있습니다.

Concolic 이라는 단어는 Concrete + Symbolic 에서 파생된 단어로 보입니다. 실제 값(Concrete)과 어떤 상징 값(Symbol)들을 사용해서 수 많은 분기문들 중에서 사용자가 원하는 영역으로 가는데에 도움을 줍니다. Concolic 이라는 개념에 대해서는 다음 링크를 참조하시는 것도 좋을 것 같습니다. 

https://en.wikipedia.org/wiki/Concolic_testing


Angr 에서는  IR(Intermediate Representation) 이라는 것은 개념을 사용하는데요. 중간언어라는 개념입니다. 

그림 출처 : http://www.csd.uwo.ca/~moreno/CS447/Lectures/Introduction.html/node6.html

우리는 수 많은 환경 속에서도 소프트웨어가 하드웨어에서 원할하게 사용되도록 하기위해서 IR 이라는 개념을 도입하고 있습니다. 다양한 환경은 많은 호환성 문제들을 야기시키는데요. IR이 없었다면 모든 언어들은 사용되는 모든 하드웨어에 대한 호환성 여부를 고려해야 했을겁니다. 그러나 IR을 통해 다양한 고급언어들이 중간언어(IR)으로서의 변환이 제대로 되는지에 대한 여부만 고려하면 되었고, 하드웨어 쪽도 IR에 대해 제대로 작동이 되는지에 대해서만 염두를 두면 되었습니다. 


Angr 는 Pyvex 라는 API 를 이용하여 분석대상 바이너리를 이 IR 로 변환시켜 분석합니다. 이렇게 모든 언어에대해 분석할 수 있는 분석 환경이 꾸려지면, 아까 언급했던 Concolic 을 사용해서 사용자가 원하는 작업을 수행시킬 수 있도록 해주는데요. 제가 가장 많이 사용할 기능인 사용자가 원하는 분기문으로 빠질 수 있는 값을 어떻게 찾을 수 있는지에 대해서, 간단하게 두 가지로 나누어 설명드리겠습니다. 먼저, 실제 값들을 대입해보며 사용자가 가기 원하는 분기문으로 빠질 수 있는 값을 찾는 방법과, 어떤 상징 값으로 변수를 두어 사용자가 가기 원하는 분기문으로 가기 위한 조건들을 찾아 해당 값을 찾는 방법입니다. 후자는 학창시절 익숙하게 사용했던 x 의 개념을 떠올리시면 편할 듯 합니다.


위의 기능은 SMT solver들 중 하나인 z3-solver 를 베이스로 만들어진, Angr에 있는 Claripy 라는 API와 관련이 있습니다. 


이런 식으로  사용자는 Angr 를 이용해서 어떤 분기문으로 빠질 수 있는 값을 쉽게 알 수 있습니다. 리버싱을 하는 데에도 굉장히 유용할 듯 싶습니다. 


이 도구에 대한 설명을 더 해보자면, Angr 는 University of California Santa Barbara의  Computer Security Lab에서 개발이 되었습니다. Angr 를 활용한 사례라면 이 연구소의 Shellphish 라는 팀이 이 도구를 사용해서 DARPA Cyber Grand Challenge 라는 대회에서 우수한 성적을 기록했다는 정도가 있겠네요. Angr 에 대한 자세한 사항들은 아래의 링크들에서 확인하실 수 있겠습니다.

angr 공식 사이트 : http://angr.io/index.html

Cyber grand Challenge (Shellphish) : http://shellphish.net/cgc/

angr 에 대해 잘 정리해놓으신 한국 사이트 : https://www.lazenca.net/display/TEC/angr

angr API doc : http://angr.io/api-doc/index.html


끝으로 좋은 도구를 소개해주신 좋은 행님께 감사함을 전하며 이만 끄읕


(+추가)

아 설치법에 대해서 적지를 않았네요. 굉장히 간단합니다.

>> sudo pip install angr


반응형

'Tools Repository' 카테고리의 다른 글

Zip 파일 패스워드 크랙 (feat. zip2john & hashcat)  (0) 2018.11.21
binwalk 설치 및 사용 예제  (0) 2018.01.29
pcapfix 사용하기  (0) 2017.11.01
WireShark editcap 사용하기  (0) 2017.11.01
dpkt 사용하기  (0) 2017.10.11