tersine mühendislik 101

Post on 17-Jul-2015

211 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Reverse Engineering 101

Tersine Mühendislik 101

Tech Talks #02

Mavidurak-IO

Fatih Erdoğan

root@mavidurak-io:~$ whoami

• Intern Security Researcher at SignalSEC

• Reverse Engineering, Exploit Development, low-level stuff

• Penetration Testing

• Sakarya University - Computer Engineering (2014 - …)

• http://ferdogan.net

• twitter.com/FeCassie

• fatiherdogan94@gmail.com

• Member at Mavidurak-IO

Reverse Engineering??

Tersine Mühendislik Nedir?

• Tersine mühendislik basitçe derlenmiş bir binary veya bir exe uzantılı,

yani çalıştırılabilir bir dosyanın nasıl çalıştığını anlamaya yönelik

uygulanan sürece denir. Yapmaya çalıştığımız şey programın nasıl

çalıştığını anlamak, çalışma yapısını çözmeye çalışmaktır.

• Genellikle C, C++, Visual Basic, Delphi gibi diller ile yazılan

programların analizi insan için kolay olur fakat bu diller bilgisayar için

anlaşılır değildir bu nedenle bir takım işlemler sonucunda bu dillerde

yazılan kodlar makinenin anlayabileceği makine diline çevirilir.

Çevrildikten sonraki kodlar insanlar tarafindan zor anlaşılır ve analiz

edilebilmesi için hem zaman hem de bolca beyin gücü gerektirir.

Tersine Mühendislik ile Neler Yapabiliriz?

Neden İhtiyacımız Var?

• Açık kaynak kodlu olmayan yazılımın kaynak kodlarını ortaya çıkarma

• Virüs ve zararlı yazılımları inceleme olanağı

• Programların lisans korumasını atlatma (Cracking) - en yaygın olan :)

• Yazılımların sağlamlığını kontrol etme

• Yazılımlara ek özellikler getirme (Patching vs.)

ReactOS Projesi

• “Açık kaynak kodlu olmayan yazılımın kaynak kodlarını ortaya

çıkarma” maddesine örnek olarak verilebilecek bir proje

• Bu proje bir grup tersine mühendis tarafından, Windows işletim

sisteminin kaynak kodlarının incelenip Windows’a benzer ücretsiz bir

işletim sistemi geliştirme amaçlı uygulanan bir projedir.

http://www.reactos.org

Requirements

Analysis

Design

Implementation

Forward Engineering Reverse Engineering

Software Engineering

Ters Mühendis Hangi Özelliklere Sahip Olmalı?

• Sınırsız merak ve araştırma isteği

• Hayal gücü, yorulmayan gözler :)

• Assembly, C ve Python gibi en az bir scripting dili bilmek

• İşletim sistemleri yapısı, CPU mimarisi, Bilgisayar çalışma mantığı

• Kriptografi

• Anti-Debugging, Anti-Reversing teknikleri

• ….

Analiz/Reversing Çeşitleri

• Statik Analiz/Reversing

• Dinamik Analiz/Reversing

Statik Analiz/Reversing

• Statik program analizi execute etmeden yani programı çalıştırmadan

yapılan yazılım analiz şeklidir.

Dinamik Analiz/Reversing

• Dinamik program analizi ise o an sanal veya gerçek bir process

üzerinde execute olan programa yapılan analizdir.

x86 Mimarisi & Assembly

Temel Aritmetik

mov eax, 5 ; eax=5

mov ebx, 3 ; ebx=3

add eax, ebx ; eax = eax + ebx

sub ebx, 2 ; ebx = ebx -2

Hafıza Erişimi

cmp eax, 2 ; compare eax with 2

je label ; if(eax == 2)

ja label ; if(eax > 2)

jb label ; if(eax < 2)

jbe label ; if(eax <= 2)

jne label ; if(eax != 2)

jmp label ; jump label

Fonksiyon Çağrıları

call function ; store return addr on the stack

; and jump to function!

func:

push esi ; save esi

pop esi ; restore esi

ret ; read return addr from the stack

; and jump to it.

Registerlar - 1

• Registerlar ne yapar?

• Lokasyon/konum depolar

• Hafıza konumuna göre daha hızlı erişim olanağı sağlar

• EAX => Değişken değerleri depolar

• EBX => Base index (diziler ile kullanılır)

• ECX => Sayaç register

• EDX => Data

• ESI => String işlemleri için kaynak indexi

Registerlar - 2

• EDI => String işlemleri için hedef indexi

• ESP => Stack Pointer (Stack’in en üst adresi)

• EBP => Base Pointer (Stack’in en alt adresi)

• EIP => Instruction Pointer (Programın o an bulunduğu yer.Bir sonraki

instruction’ın adresini depolar.)

Registerlar - 3

• Segment Registerları

Hafızanın belli segmentlerini adreslemek için kullanılır

(code/data/stack segmentleri)

• CS => Code Segment

• SS => Stack Segment

• ES => Extra Segment

• DS => Data Segment

• FS,GS Segments

32-Bit Registerlar (x86)

Ne tür araçlar kullanacağız?

Tersine Mühendisin Alet Çantası

• Tersine mühendislik yaparken kullandığımız bir takım araçlar var.

Bunlar:

• Disassemblerlar

• Debuggerlar

• PE Editörleri

• Hex-Resource Editörler

• Sistem İzleme Araçları

Disassembler

• Bu yazılımlar, programı disassembly işleminden geçirerek programın

assembly kodu şeklindeki halini gösterir.

• Bu olay bize programda çağırılan fonksiyonları, string değerleri vs.

görüp incelememize olanak sağlar.

• En yaygın olarak kullanılarak disassembler => IDA

IDA Disassembler

IDA - 2

Debugger• Debuggerlar ile programın çalışmasını satır satır izleyebiliriz.

• Disassembler gibi çalışırlar fakat ek olarak işlemleri izleme imkanımız olur.

• Çoğu zaman cracking, malware analizi, exploit geliştirme aşamalarında kullanılırlar.

• Bir debugger ile programın çalışması esnasında değişiklik yapılabilir.

• En yaygın olarak kullanılan debuggerlar:

• ImmunityDebugger

• OllyDbg

• WinDbg

ImmunityDebugger

OllyDbg

OllyDbg - 2

WinDbg

WinDbg - 2

Örnek WinDbg Komutları

•r: registerların o anki durumunu/içeriğini gösterir

•t: trace-step (until call)

•pt: single-step (until-ret)

•g: process run (go!)

•.hh: yardım komutu (örnek => .hh pt)

•lm: list modules

PE Editörleri

• PE => Portable Executable

• Nedir? => Windows çalıştırılabilir dosya formatı

• Bu programlar PE dosyalarının PE bilgilerini okumak için kullanılır

• Tersine Mühendisliğin en önemli konularından birisidir

==> “PE candır gerisi heyecandır”

• PE dosyaları program ile ilgili kritik bilgileri barındırdığından tersine

mühendislik veya malware analizi yaparken PE ile baya içli dışlı

olacağız :)

PE Editörleri - 2

• Yaygın olarak kullanılan PE Editörleri

• CFF Explorer

• LordPE

• DIE => Detect It Easy

• PeiD

CFF Explorer

LordPE

DIE (Detect It Easy)

PeiD

Hex - Resource Editörler

• Diğerlerine göre çok yaygın değiller

• Basit string düzenlemeleri

• Bayt değiştirmeleri

• Hızlı kod analizi

• …

Hex - Resource Editörler

• Birçok hex-resource editör mevcut

• HxD

• Hex Workshop

• ResEdit

HxD

Hex Workshop

ResEdit

Sistem İzleme Araçları

• Microsoft SysInternal Tools

• Process Explorer

• Process Monitor

• AutoRuns

• TCPView

Process Explorer

Process Monitor

AutoRuns

TCPView

Anti-Debugging??

Anti-Debugging

Anti-Debugging

Nasıl Bypass Ederiz??

Basic Anti-Debugging Bypass

Tersine Mühendislik denilen olay

bu kadar mı??

Tersine Mühendislik-102 Ajanda

• Basic Windows Internals

• PE Dosya Yapısı

• Stack’in içinde neler oluyor?

• Debugging’e giriş. CrackMe çözümü

• Anti-Debugging Örneği

• Windbg’a giriş

Fatih Erdoğantwitter.com/FeCassie

Mavidurak-IO

http://mavidurak.github.io

top related