antidebugging eu não quero que você mexa no meu código

100
Globalcode – Open4education SP15:Trilha Segurança

Upload: wanderley-caloni

Post on 12-Aug-2015

112 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

SP15:Trilha Segurança

Page 2: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Locks are so old-fashioned…

SP15:Trilha Segurança

Page 3: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Anti-debugging: eu não quero que você mexa no meu código

Page 4: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Wanderley Caloni

Sócio-Desenvolvedor da

Page 5: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Wanderley Caloni

Sócio-Desenvolvedor da

Page 6: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Agenda

Page 7: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Agenda

Jabá Time!

Page 8: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

2013-2014-…

Page 9: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

2013-2014-…

Prova incontestável de autenticidade!

Page 10: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

2000 e bolinha (??)

Page 11: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 12: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 13: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 14: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 15: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 16: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Exemplos de projetos/clientes da Intelitrader/BitForge:

Page 17: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Exemplos de projetos/clientes da Intelitrader/BitForge:

Page 18: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Segurança da informação

Mercado financeiro

Software de baixo nível

Sistemas críticos

LinguagensC, C++, .NET, VB6, Python, Delphi, Assembly, ASP.NET, SQL, HTML5, PostGres, Oracle, Inglês, Português, Russo, Polonês e todas as outras.

Page 19: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 20: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 21: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Onde sou? Quem estou?

Page 22: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

É isso aí pe-pe-pe-pe-pe…

Jabá End

Page 23: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Agenda

Interpretação baseada em exceçãoint 3

Ocupando a debug portDebug Port

Detectando attachAttach

Conclusão

Page 24: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

?

Page 25: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

int x = 3;

Page 26: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 27: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 28: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 29: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

asm

Page 30: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

assembly

Page 31: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

assembly

Page 32: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

assembly

Page 33: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

nopnopnopnop…

Page 34: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

nopnopint 3nop…

F9

Page 35: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

nopnopint 3nop…

Page 36: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

nopnopint 3nop…

Page 37: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

nopnopint 3nop…

EXCEPTION!!

Page 38: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 39: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 40: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 41: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Page 42: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

hardware

program

windows

CPU

THREAD

nopnopnopnopint3nopnopnop…

Page 43: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

hardware

program

windows

CPU

THREAD

nopnopnopnopint3nopnopnop…

Page 44: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

hardware

program

windows

CPU

THREAD

nopnopnopnopint3nopnopnop…

INTERRUPT

Page 45: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

hardware

program

windows

CPU

THREAD

nopnopnopnopint3nopnopnop…

Page 46: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

hardware

program

windows

CPU

THREAD

nopnopnopnopint3nopnopnop…

Structured Exception Handling

Page 47: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

hardware

program

windows

CPU

THREAD

nopnopnopnopint3nopnopnop…

try{}catch() (ou except){}

Page 48: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

program

try{}catch() (ou except){}

debugger

Page 49: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

program

try{}catch() (ou except){}

invasor

Page 50: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

program

try{}catch() (ou except){}

program

Page 51: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

program

try{}catch() (ou except){}

program

?

Page 52: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

try{ // nonsense int 3 (DebugBreak())}except( ExceptFilter() ){ // nonsense}

ExceptFilter(){ // here is the gold}

Page 53: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

try{ // nonsense int 3 (DebugBreak())}except( ExceptFilter() ){ // nonsense}

ExceptFilter(){ // here is the gold}

Page 54: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

try{ // nonsense int 3 (DebugBreak())}except( ExceptFilter() ){ // nonsense}

ExceptFilter(){ // here is the gold}

Page 55: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

“Run, code, run!” – No One

Page 56: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3

Problemas:Multithreading (e lock, e mutex, e inferno).

Fluxo não-contínuo de execução

Performance

Fica feio

Page 57: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

Long Jump Silver!

Page 58: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

CodeCodeCodeCodeSetLongJumpCodeCodeCode…Jump!

Page 59: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

CodeCodeCodeCodeSetLongJumpCodeCodeCode…Jump!

Page 60: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

CodeCodeCodeCodeSetLongJumpCodeCodeCode…Jump!

Page 61: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

CodeCodeCodeCodeSetLongJumpCodeCodeCode…Jump!

Page 62: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

CodeCodeCodeCodeSetLongJumpCodeCodeCode…Jump!

Page 63: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

CodeCodeCodeCodeSetLongJumpCodeCodeCode…Jump!

Page 64: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

#define ANTIDEBUG(code) { jmp_buf env; if( setjmp(env) == 0 ) { LongJmp(&env); } else { code; } }

Page 65: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

#define ANTIDEBUG(code) { jmp_buf env; if( setjmp(env) == 0 ) { LongJmp(&env); } else { code; } }

Page 66: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

DWORD LongJmp(jmp_buf* env){ __try { __asm int 3 } __except( EXCEPTION_EXECUTE_HANDLER ) { longjmp(*env, 1); }

return ERROR_SUCCESS;}

Page 67: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

DWORD LongJmp(jmp_buf* env){ __try { __asm int 3 } __except( EXCEPTION_EXECUTE_HANDLER ) { longjmp(*env, 1); }

return ERROR_SUCCESS;}

Page 68: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

int 3: v. 2

“Run, Forrest, run!” – Long Dong

Page 69: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

Page 70: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

Lock!

Page 71: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

program

try{}catch() (ou except){}

debugger

Page 72: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

program

try{}catch() (ou except){}

debugger

Debug Port

Page 73: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

Como é o código de um depurador:

Page 74: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

Como é o código de um depurador:

Loop: WaitForDebugEvent(&debugEvt, INFINITE); ContinueDebugEvent(pid, tid, DBG_SBRUBLES);

Page 75: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

Como é o código de um depurador:

Loop: WaitForDebugEvent(&debugEvt, INFINITE); ContinueDebugEvent(pid, tid, DBG_SBRUBLES);

That’s it!

Page 76: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

program

Debug Port

Page 77: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

program

Debug Port

invasor

Page 78: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

program

Debug Port

invasor

WTF? Access Denied!

Page 79: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

“KnockKnockKnockin' on debug's port”

Page 80: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Debug Port

“KnockKnockKnockin' on debug's port”

- Bob Dybug

Page 81: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

Did you say…

Page 82: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

assembly????????

Page 83: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

// opcodes to run a jump to // the function AntiAttachAbort

BYTE jmpToAntiAttachAbort[] = { 0xB8, 0xCC, 0xCC, 0xCC, 0xCC, // mov eax, 0xCCCCCCCC

0xFF, 0xE0 // jmp eax

};

Page 84: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

program

invasor

Page 85: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

program

invasor

Page 86: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

program

invasorTHREAD

ntdll!DbgUiRemoteBreakin

Page 87: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

ntdll!DbgUiRemoteBreakin

773F10A0 push 8 773F10A2 push 773F10F8h 773F10A7 call __SEH_prolog4 (77384420h) 773F10DB xor eax,eax 773F10DD inc eax 773F10DE ret 773F10DF mov esp,dword ptr [ebp-18h] 773F10E2 mov dword ptr [ebp-4],0FFFFFFFEh 773F10E9 push 0 773F10EB call RtlExitUserThread (77362B10h) 773F10F0 int 3

Page 88: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

ntdll!DbgUiRemoteBreakin

773F10A0 push 8 773F10A2 push 773F10F8h 773F10A7 call __SEH_prolog4 (77384420h) 773F10DB xor eax,eax 773F10DD inc eax 773F10DE ret 773F10DF mov esp,dword ptr [ebp-18h] 773F10E2 mov dword ptr [ebp-4],0FFFFFFFEh 773F10E9 push 0 773F10EB call RtlExitUserThread (77362B10h) 773F10F0 int 3

Page 89: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

ntdll!DbgUiRemoteBreakin

Page 90: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

ntdll!DbgUiRemoteBreakin

773F10A0 jmp NaNaNiNaNaaaaooooo

773F10A7 call __SEH_prolog4 (77384420h) 773F10DB xor eax,eax 773F10DD inc eax 773F10DE ret 773F10DF mov esp,dword ptr [ebp-18h] 773F10E2 mov dword ptr [ebp-4],0FFFFFFFEh 773F10E9 push 0 773F10EB call RtlExitUserThread (77362B10h) 773F10F0 int 3

Page 91: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

ntdll!DbgUiRemoteBreakin

773F10A0 jmp AntiAttachAbort

773F10A7 call __SEH_prolog4 (77384420h) 773F10DB xor eax,eax 773F10DD inc eax 773F10DE ret 773F10DF mov esp,dword ptr [ebp-18h] 773F10E2 mov dword ptr [ebp-4],0FFFFFFFEh 773F10E9 push 0 773F10EB call RtlExitUserThread (77362B10h) 773F10F0 int 3

Page 92: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

AntiAttachAbort?

Page 93: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

AntiAttachAbort?

Page 94: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

AntiAttachAbort?

TerminateProcess

Page 95: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Attach

Page 96: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Conclusão

Page 97: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Conclusão

Page 98: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Conclusão

Técnicas anti-debugging são complicadasTODO: Encapsular em uma LIB

Nenhuma técnica é perfeitaPerformance, complexidade, instabilidade…

Linus Torvalds pode aparecer em um slide de um MVP e ele não será expulso da congregação

O contrário não é verdadeiro

Page 99: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Contato

[email protected]

twitter

saite

e-mail

Page 100: Antidebugging   eu não quero que você mexa no meu código

Globalcode – Open4education

Agradecimentos