블로그 이미지
Flying Mr.Cheon youGom

Recent Comment»

Recent Post»

Recent Trackback»

« 2024/5 »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

 
 

 

0. 지난 시간 리뷰

소프트웨어에서 암호화를 활용하기 위해서는 키 관리가 매우 중요하다. 결국 암호화 키 Chip을 사용하거나 SSL 통신 채널을 활용하는게 안전하다.

실제 개발을 해보면 짧은 기간에 프로젝트를 완료해야 하므로, 리버싱이나 기타 보안에 대해 고려하면서 진행하기에는 어려운 부분이 있다. 개발 부서에서 보안관련 부분을 모두 챙기기 어려운 부분이 있으니 보안성 검토/검증을 서포트 해주는 인원이 필요하다.

 

1. 스마트폰 리버싱, 안드로이드/아이폰

루팅은 필요한가? 포렌식이나 증거물 찾을 때 필요하다. 또는 JTag을 활용한다.

루팅이 되면 제조사에 불이익이 있을텐데, 루팅을 정말 막지 못하는것일까? 아니면 OS 제공업체가 협조를 하지 않는 것일까?

http://www.elcomsoft.com ; http://www.elcomsoft.com/eppb.html ; 리버싱으로 법정에 선 최초 업체.

 

2. Practical Reversing ( Software Update )

Client/Server 상호 인증하는가? Binary 인증을 하는가? 둘중 하나라도 해야한다.

암호화 모듈로 된 부분은 분석 대상이 된다.

 

3. Practical Analysis ( Encrytion Software )

파일 암호화되어 있는 유틸을 해제해 본다. 파일내에 암호정보를 저장하고 있다. 이 부분을 확인하여 숨겨진 암호를 알아낸다.

 

:

0. 시작하며.

리버싱을 하는 대부분의 사람들은 돈을 벌기 위해 하는 경우가 많다.

사이버 꽃뱀, 스매싱 등의 프로그램은 중국발이 많으며, 대부분은 마약거래범들이 투잡으로 하는 경우가 많다.

사이버 꽃뱀 : 스카이프등을 이용하여 음란한 대화를 유도한 후, XXX챗 어플 사용을 유도, 개인정보( 연락처 등 )을 강제로 흭득한 후, 주변인에게 알리겠다고 협박하여 돈을 갈취.

기존에 출시된 제품에 대해 리버싱하여, 정품보다 1/5정도로 더 싸게 하여 유사품 출시.

아이폰의 충전 암호칩이나 토너재생품등이 대표적이다.

튜링상을 받은 유닉스 창시자가 수여식에서 발표한 논문은 'Reflection on trusting trust'이다.

그 논문의 내용은 우리들이 믿고 있던 login Module에 대해 속았다는 것이다.

login.c 소스코드에는 이상이 없으나, 컴파일시에 '어느 하나의 아이디와 암호를 입력하면 모두 통과'시키도록 했다는 것이다. 즉, 소스코드보다 실행되는 실체가 더 중요하다는 이야기를 하고 싶었던 것이다.

( 그래서.. 컴파일시에 취약점을 검출하는 것이구나.. 라는 생각이 들었다. 그냥 컴파일시에 하는 파서를 활용하여 하는 줄 알았는데, 이런 것과 연관성이 있다니.. )

 

1. 암호화의 필요성 

RSA timing attack in OpenSSL code.

구글에서 '삼성 리버스엔지니어링' 검색했더니, 최근 취약점에 대한 내용의 포스팅이 있었다.

http://hustoknow.blogspot.kr/2013/05/reverse-engineering-samsung-sde-5001.html

SSD의 핵심기술은 R/W가 고루 이루어질수 있도록 하는 FTL기술이다. SSD( nand flash ) 는 HDD와 드라게 10만 읽고 쓰면, 해당 블럭을 더이상 사용하지 못하기 떄문이다. 아직 중국에서 흉내내지는 못하고 USB를 넣고 외형만 SSD인것처럼 판매하고 있다.

SmartGrid에도 리버싱 엔지니어링이 가능하다. 스마트 그리드는 자체 에너지 시스템으로 지능형 전력망 시스템으로 보면 된다.

자동차에도 CAN이라는 시스템을 해킹하여 악성코드를 넣어서 사용할 수 있다.

자동차 회사에서 급발진 오작동에 대해 시스템 문제인지 사용자 과실인지 확인하기 위해, 무작위 300명을 모집하여 레포트를 냈다. 휴대폰 10만대에 해당하는 전자파 실험군과 사용자 실수를 유발할 수 있는 실험군으로 뒀을 때, 기혼 여성 2명에게서 급발진과 유사한 결과를 냈다. 그 레포트가 지금까지 법정에서 판례로 사용되고 있다.

Software R/E에서 Windows PE, Linux ELF는 인터넷에 검색하면 많은 자료가 있지만, Embedeed의 Binary, Opcode를 리버싱하는 자료는 많지 않다. CPU를 기준으로 Opcode로 접근한다.

Hardware R/E를 하는 곳이 국내에 Crypto Research, Chipworks가 있다. 이 업체들도 인수됐다.

Hardware R/E를 하기 위해서는 키 값을 저장해 두어야 한다. 그 부분을 ArmTrustZone에 둔다. 이 부분을 알아내려면 Software R/E가 아니라 Hardware R/E로 트러스트존을 해킹 해야한다.

키를 알아낼수 있는 방법이 SideChannel Attack이라 한다. SPA( Single power analysis ), OPA 라고 부른다.

현존하는 Software는 전부 리버싱이 가능하다고 보면 된다. Software R/E를 아주 잘하는 사람도 Hardware R/E쪽에는 쉽게 접근할 수 있는 분야가 아니다. Software R/E부분은 사람에 따라 시간적 차이가 있을 뿐 결국 해킹이 된다는 말이다.

 

2. 소개

해외 리버싱 관련 교육 비용은 일인당 사백씩 든다. 교육의 내용은 매우 기초 수준이지만, 좋은 연대를 맺기 위해 교육을 듣는 사람도 있다고 한다.

BlackCat 참여비가 300만원 정도 든다.

시스코의 라우터에 패킷하나를 보내서 원격 exploit를 할수 있는 취약점도 존재 했었다.

실습용 virtual box 사용. 바탕화면에, CFX, ida pro free, immunity debugger, ollydbg, pdfStreamDumper가 있음.

추가 툴로는, Autoruns, CompoundViewer, DiskMon, DiskView, FilemonNt, Hex Workshop, IDA, ImprtREC, LordPE, obdg200k, OllyDRX, PDF_Analysis, PEditor 1.7, PEiD, PEView0.9.8, ProcessExplorer, ProcessMonitor, PsTools, RegmonMonitor, Stud_PE, WMUpacker가 있다.

 

- 오후 -

 

3. 배경

Source -> Binary : Source;Code( 함수명, 변수명 )를 Stripped Binary 으로 ASM CODE, DATA를 만든다.

Software Breark Point : INT 3, 소프트웨어 실행시점에 Break할 수 있다.

Hardware Break Point : D/Register 0~3, Read/Write/Excuete 로 나누어 Break할 수 있다.

 

C 소스코드 중에서 printf같은 경우는 dynamic lib다. 일반 foo()함수는 static lib이다. static lib는 excute binary에 포함된다. 이 말의 뜻은 excute binary의 asm에 printf;dynamicLib은 기록되어지고, foo;staticLib는 asm으로 기록되어 있다. 실질적인 예를 들어서 설명하자면, 암호화 모듈을 dynamic lib로 하여 컴파일한다면, secureEncode()함수가 asm에 나타나와있게 된다. 리버싱 공격자는 이런 흔적을 토대로 접근한다.

즉, 가능하다면 secure관련 모듈은 dynamic module 보다는 static module로 binary에 모두 포함되어 공격자가 흔적을 찾을 수 없도록 하는 것이 좋다.

 

 

4. 배경

ASM의 실행코드는 Register, Memory( Stack, Heap )에 올라와 있다.

x86 processor ( 32bit ) 를 대상으로 설명함 :

EIP, EFLAGS

EAX, EDX, ECX, EBX

ESP, EBP, ESI, EDI

Register는 4가지 주소체계를 가지고 있음 : Lower 8bit, Mid 8bit, Lower 16bits, Full register

ex. ) EAX( 32 ) -> AX( 16 ) -> AH( high 8bit ) : AL( lower 8bit )

ASM 함수의 리턴값은 EAX에 둔다.

ASM 함수 파라메터는 지역변수와 비슷하게 저장하고 버려진다.

함수 역할이 완료되면 Return Address를 참조하여 호출 전 위치로 돌아간다. 이 부분의 취약점을 사용한 공격법이 StackOverflow다.

 

 

5. x86 excution

함수의 진입부를 에필로그, 반환부를 프롤로그라고 한다.

에필로그는 기존 버퍼를 백업하고 현재 파라메터와 지역변수를 채운다.

프롤로그는 백업된 버퍼를 복구하고 반환주소로 돌아간다.

lea : load effective address

지뢰 찾기로 예제로 가지고, 지뢰를 다 찾아내는 걸 해봤다. IDA로 지뢰찾기( c:\windows\system\winmine.exe ) 실행파일을 불러온다. ShowBumbs 함수를 추적해 본다. 추적한 그 함수를 DeRox를 이용하여 해당 함수를 F1( DoHelp ) 대신에 실행되도록 한다. ShowBumbs는 지뢰 밟았을 때, 호출되어 모든 지뢰가 나타나도록 하는 함수다. 이 것을 이용하여 도움말키를 누르면 지뢰가 모두 보이도록 하는 것이다.

 

 

* 일반적인 교육 내용에 대해 정리했으며, 이슈가 될 사항이 있다면 비밀댓글 달아주시기 바랍니다.

 

 

: