Top Banner
Globalcode – Open4education SP15:Trilha Segurança
100

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

Aug 12, 2015

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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