블로그 이미지
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

 
 

.NET PublicKeyToken

보안/리버싱 | 2020. 4. 24. 20:35 | Posted by youGom

c# 실행파일 하나 디컴파일 하다, 잘 안되길래 살펴보다 보니 publickeytoken 이라는 걸 활용하는 것 같아서 살펴봄.

어떻게 만들어지는지 참조해놓고, 이 걸 이용해서 풀어야 하는건지 살펴볼 예정,

 

--------------------------------------------------------------------

 

echo 'csharp code, bla bla bla' > main.cs

 

sn -k first.key

sn -p first.key first_pub.key

 

sn -tp first_pub.key

>> public key token ......

 

csc /keyfile:first.key /out:temp.dll /t:library main.cs

>> make temp.dll

 

ildasm /out:info.txt temp.dll

>> view info.txt

 

csc /r:temp.dll main.cs

>> make main.exe

 

ildasm /out:final.txt main.exe

>> view final.txt

 

--------------------------------------------------------------------

 

아래 영상은 검색하다 찾은 영상,

 

 

 

 

:

[리버싱] 심볼제거 정보

보안/리버싱 | 2013. 9. 9. 12:43 | Posted by youGom

 

출처 ;

http://verysimple.org/wiki/moin.cgi/HideDebugSymbol#fndef-789cb63c063e4d9502bddcaf0d2e4ecef8e9de1b-0

 

 

JNI native 프로젝트인 경우

  • Java로만 구성된 프로젝트와는 달리 <<JNI>> native 가 추가되면 <<ProGuard>>에서 Java와 동시에 Native쪽까지 처리해주지 못한다.

  • JNI 쪽에 등록된 함수명을 ProGuard가 임의로 바꾸면 안된다. --> ProGuard 측에서 특정 함수명을 바꾸는 것을 금지하도록 설정할 수 있다.

Native 측의 디버깅 심볼 숨기기

  • so 파일에 심볼이 존재하는 지 확인하는 방법
    1. apk은 zip 압축방식과 동일하므로 zip프로그램으로 압축을 푼다.
    2. 압축 푼 lib/armeabi 폴더 밑에 *.so 파일을 확인한다.
    3. objdump.exe1 나 readelf.exe1 를 이용해서 so 파일 안에 심볼이 존재하는지 확인

      • objdump -S *.so
        혹은
        readelf -Wa *.so
  • so 파일의 심볼을 지우기
    1. gcc 컴파일 옵션 추가
      • Android.mk 파일에 디버깅 심볼을 지우는 옵션 추가
        LOCAL_CFLAGS    := -fvisibility=hidden

        어떤 PC에서는 되고2 어떤 PC에서는 심볼이 모두 통체로 사라진다. --> NDK 버전 문제로 추측된다.

    2. strip1 파일로 so 파일에서 직접 심볼을 지우기

iPhone

어뷰징 이슈

  • 탈옥된 폰에서 아래와 같은 방법으로 어뷰징을 할 수 있음
    • 공격방법 : 탈옥된 디바이스에서 gdb를 이용한 디버깅, jump 명령어로 내부함수를 직접호출하면 인터럽트가 발생할 때까지 해당 함수가 반복되어 곧바로 최고 레벨을 달성할 수 있습니다.
      (gdb) info functions
      ... (생략) ...
      0x00023ebc LevelUp
      0x000d3a08 GetItem
      ...(생략) ...
      (gdb) call LevelUp
      $1 = {<text variable, no debug info>} 0x23ebc <LevelUp>
      (gdb) jump LevelUp --> LevelUp() 함수 반복 수행으로 레벨200 달성
      Continuing at 0x23ecc.
      
      (gdb) p (int) GetItem(20) --> 아이템 생성
      $1 = 1
      (gdb) p (int) GetItem(21)
      $2 = 1
      (gdb) p (int) GetItem(22)
      $3 = 1

원인

  • 실행 바이너리 파일에 심볼 정보가 남아있어서 발생하는 문제.
:

[리버싱] Immunity Debugger Intro.

보안/리버싱 | 2013. 7. 23. 16:57 | Posted by youGom


http://debugger.immunityinc.com/


여기서 다운로드 받는다. 간단한 이메일과 기타 정보 적으면 다운로드 받을 수 있다.


디버거 설치 후 파이썬 2.7.1을 추가로 설치한다.



:

오늘은 시험이 있는날~

 

0. password 정보 추출 및 위치 추적

OllyDBG의 Attach를 이용하여 패스워드 입력 부분부터 리버싱을 시작한다.

Reg비교 부분을 브레이크를 걸고 역추적하기 시작한다.

Reg에 Load하는 부분을 역추적한다.

Reg에 Load하는 시기 ( H/W Write Break ) 를 활용해서 Pass값이 채워지는 시기를 포착한다.

데이터 또는 정보를 Load하기 위한 Func( JMP ) 주소를 IDA를 활용하여 역추적한다.

로드 Func위치를 알아내면 OllyDBG를 다시 활용하여 값을 재추적하고 추가적으로 Func역추적이 필요한 다시 IDA를 활용한다.

 

1. Hardware Reversing

chipworks

sidechannel attack

 

2. last practice

doc, XXXBM70.XXX. HENREAD, HENCREATE, ...

암호 낮음 : des

암호 높음 : aes

SSCE4232...

 

3. android

apktool을 활용해서 역컴파일이 됨.

기타 툴, 메일로 보내달라고 요청하자~

 

 

 

 

:

 

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 )

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

 

:

 

 

1. IDA plugin

ProgramFiles\IDA\plugin에 넣어두면 자동으로 등록된다. 동작하지 않는다면 IDA의 edit-plugins에서 항목을 클릭하여 실행하면 된다.

 

2. OllyDBG

시리얼 정보 취득을 위해 S/W 브레이크 포인트와 H/W 브레이크 포인트를 잘 활용하여 사용한다.

시리얼 정보를 비교하는 부분에 대해 S/W 브레이크포인트를 달아두고, 시리얼번호를 입력받은 후 레지스터 값을 알아보기 위해 레지스터 follow dump를 뜬 다음 해당 위치에 H/W 브레이크 포인트를 걸어둔다. 그리고 시리얼을 입력하면 레지스터에 등록된 값과 비교 대상의 값이 나타난다. 이 부분이 실제 필요한 시리얼 번호가 된다.

시리얼 번호를 Generate하는 부분을 찾기 위해서, 제너레이션의 기준이 되는 글자에 메모리 또는 하드웨어 액세스( Read ) 브레이크를 걸어두고 추적하면 된다.

OllyDBG는 www.ollydbg.de 에서 무료로 배포 받을수 있다.

 

3.

Trace over ( Ctrl + F12 ) 기능을 이용해서 op 실행 히스토리를 추적할 수 있다.

 

4.

실행파일내에 자식 프로세스를 OllyDBG 2.0 ( 빨간색 아이콘 )으로 디버깅한다.

 

5.

OllyDBG 의 Attach 기능을 활용한다. Attach기능은 현재 실행중인 프로세스를 디버깅하는 기능이다.

excute til user code ( alt + F9  ) 를 두번 해준다. Attach하면 마우스 포인트 DLL 위치를 가리키고 있기 때문이다.

 

6.

외주에 암호화 작업을 맡겼다고 할지라도, 실제 보안성 검토를 해보면 XOR 암호화 정도만 하는 경우가 많이 있다. 소스코드에서 확인도 중요하지만, 실제 컴파일된 ASM단에서 암호화가 잘 되어 있는지 실체를 확인하는 것이 좋다.

 

7.

DeRox( OllyDBG 1.0 )은 Thread와 Just in time에 대한 버그가 많았다. 추가 플러그인없이 수정한 코드를 저장할수 있다.

OllyDBG 2.0 ( 빨강 )은 Thread와 Just in time에 대해 버그를 수정했다. 수정한 내용을 저장하려면 플러그인을 설치해야 한다.

 

 

 

:

 

 

1. 암호해제

암호 해제하는데 생각보다 짧은 시간이 요구된다. 현재 키보드의 문자수는 95개이다. 평균 암호 문자수는 8글자다. 암호 검출 경우의 수는 95^8이다. 약 30분의 시간이 필요하다.

asm에서 xor를 이용하여 초기화로 활용한다. xor eax eax; 는 eax가 모두 같은 비트이므로 0으로 초기화한다.

 

2. PE 구조

기본 분석 ( PE 구조 ) [ PE : Portable Executable ]

- PE는 MS의 기본 파일 구조, Unix COFF파일 포멧형식에 근간을 둔다.

- PE_format_layout 파일을 참고하여 구조체 확인

 

3. PE 작성 트레이닝

Hex Workshop을 이용하여 PE구조 확인, 16bit/32bit.

물리적 메모리주소 진입점은 ImageBase + OffSet = AddressOfEntryPoint 이다.

PE_View 툴를 이용하여 PE구조를 살펴본다.

PE_View에서 보는 것과 같이 ImageBase:0x400000, OffSet:0x1000, AddressOfEntryPoint의 시작주소가 0x401000 시작하는지 확인하기 위해 OllyDBG를 활용해 본다; OllyDBG는 바이너리를 분석하고 싶을 때 사용하는 도구다. OllyDBG에서 Registers정보의 EIP값이 0x401000임을 확인할수있고, Ctrl+G를 눌러서 0x400000을 입력하여 해당 주소의 HEX값을 확인해 본다.

바이너리는 기본적으로 암호화시키거나 인증하는 부분에 대해 고려되지 않았다. 바이너리코드 인증과 서버 업데이트 인증이 필요하다.

RSA가 최근에 뚫렸다. RSA에 활용되는 OTP의 설계도도 노출되었다.

일반적으로 IMAGE_SCN_MEM_READ권한만 허용한다. WRITE가 있는 경우, 악성코드일 가능성을 둔다. 정상적인 프로그램중에 Packing된 바이너리도 WRITE권한이 있다. 자체적으로 unpacking해야 하기 떄문이다.

 

3.

바이너리 코드에서 import한 ( DLL ) 함수명들을 확인하여 해당 프로그램의 용도 및 분석 접근방법을 유추한다. 그래서 함수명이 정적으로 볼수 없고, 런타임시에 Decode되어 나타나도록 해서 리버싱 분석 시간을 지연시킨다.

 

4.

Packing된 바이너리의 Entry Point를 찾는 것이 중요하다.

Unpacking하는 방법이다.

PUSHAD한 후 POPAD한 다음 JMP로 O.E.P로 간다; OEP : Original Entry Point.

OEP에 Pause를 걸어두고, plugins - OllyDBG dump를 이용해서 저장한다.

저장한 후 importREC를 이용해서 Pause걸어두었던 OEP 주소를 재설정해주고 조금전에 저장한 파일에 저장한다.

 

5. IDA

multi processor 지원.

IDAScript는 javasciprt와 C++를 활용. IDAPython은 순수 Python으로 모든 기능을 활용.

 

6.

AES, SHA256을 활용해 암호화를 구성해서 통신을 하더라도, key관리가 되어야 한다. 보통 소프트웨어 내부에 키를 저장해두고 사용한다. 이 key를 안전하게 관리하기 위하여 SSL을 구축하여 암호화 통신을 해야 한다. SSL은 Client와 Server측의 X, Y 키 값을 서로 나누어 가지고 연결 때 마다 새로운 세션을 구성한다.

SSL 을 구성하지 않는다면, 리버싱 엔지니어링으로 해당 키를 검출해 낼 수 있다.

 

7. IDA

모든 것을 분석하면 초록불이 뜬다. ( Ready ), Lib, Data 부분은 분석할 필요가 없으며, Regular function과 instruction 부분에 대해 분석이 필요하다.

IDA viewA : 분석된 ASM 정보

Hex ViewA : 헥사 정보

Exports :

Imports : Lib 정보

Name : IDA의 특성을 알 수 있다. 숫자를 대신함.

functions window :

strings window : ascii, ... 에 대한 문자 내용

Structures : 스트럭쳐 구조를 Reverser가 재정의하여 관리 할수 있는 창

Enum : 위 스트럭처와 같은 목적. Enum 재정의.

Windows - Reset Desktop : 윈도우 창들 재정리 해주는 메뉴

 

IDA에서 접근이 될만한 부분 ( String )에 대해 확인 후 Break 건 다음에 해당 위치에서 어떤 값이 들어가는지 확인한다. 확인 후 값을 수정하거나 명령어를 HexEditor를 활용하여 바꿔준다.

 

 

 

 

 

 

 

:

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는 지뢰 밟았을 때, 호출되어 모든 지뢰가 나타나도록 하는 함수다. 이 것을 이용하여 도움말키를 누르면 지뢰가 모두 보이도록 하는 것이다.

 

 

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

 

 

:

리버싱 관련 주소

보안/리버싱 | 2011. 7. 14. 11:06 | Posted by youGom
: