finding vulnerabilifes cs642 computer security
play

Finding vulnerabiliFes CS642: Computer Security - PowerPoint PPT Presentation

Finding vulnerabiliFes CS642: Computer Security Professor Ristenpart h9p://www.cs.wisc.edu/~rist/ rist at cs dot wisc dot edu University of Wisconsin CS 642


  1. Finding ¡vulnerabiliFes ¡ CS642: ¡ ¡ Computer ¡Security ¡ Professor ¡Ristenpart ¡ h9p://www.cs.wisc.edu/~rist/ ¡ rist ¡at ¡cs ¡dot ¡wisc ¡dot ¡edu ¡ University ¡of ¡Wisconsin ¡CS ¡642 ¡

  2. Finding ¡vulnerabiliFes ¡ Manual ¡analysis ¡ Simple ¡example: ¡double ¡free ¡ Fuzzing ¡tools ¡ StaFc ¡analysis, ¡dynamic ¡analysis ¡ … ¡ University ¡of ¡Wisconsin ¡CS ¡642 ¡

  3. "#$%&'()*(&)+&,-.&/)+',$&((&()#01) 2&$30,.,45)6,),76#80)#)(804*.#') 4,#.9):0;,'<#68,0)1,<80#0$& From ¡“How ¡Hackers ¡Look ¡for ¡Bugs”, ¡Dave ¡Aitel ¡

  4. "#$%&#&'#()*%&)+,-./0&1&#2-& #00#/$&30&+%(,0%*4 560#32&7+,-./0 7+,0,/,*&82#*4'3' <#2.#*&=%0>,+$& @,.+/%AB32#+4 9.::32; ?.*2%+#63*304&82#*4'3' 82#*4'3' 5)%2&@,.+/% G%'%#+/H 7+3F#0%&@,.+/% CD)*,30&E%F%*,)(%20 G%'%#+/H ! From ¡“How ¡Hackers ¡Look ¡for ¡Bugs”, ¡Dave ¡Aitel ¡

  5. Manual ¡analysis ¡ • You ¡get ¡a ¡binary ¡or ¡the ¡source ¡code ¡ • You ¡find ¡vulnerabiliFes ¡

  6. IDA ¡Pro ¡

  7. IDA ¡Pro ¡

  8. What ¡type ¡of ¡vulnerability ¡might ¡this ¡be? ¡ main( ¡ ¡int ¡argc, ¡char* ¡argv[] ¡) ¡{ ¡ ¡ ¡char* ¡b1; ¡ ¡ ¡char* ¡b2; ¡ ¡ ¡char* ¡b3; ¡ ¡ ¡ ¡b1 ¡= ¡(char*)malloc(248); ¡ ¡ ¡ ¡b2 ¡= ¡(char*)malloc(248); ¡ ¡ ¡free(b1); ¡ ¡ ¡ ¡free(b2); ¡ ¡ ¡b3 ¡= ¡(char*)malloc(512); ¡ ¡ ¡strncpy( ¡b3, ¡argv[1], ¡511 ¡); ¡ ¡ ¡free(b2); ¡ ¡ ¡free(b3); ¡ } ¡ Double-­‑free ¡vulnerability ¡

  9. Double-­‑free ¡vulnerabiliFes ¡ Can ¡corrupt ¡the ¡state ¡of ¡the ¡heap ¡management ¡ Say ¡we ¡use ¡a ¡simple ¡doubly-­‑linked ¡list ¡malloc ¡implementaFon ¡ with ¡control ¡informaFon ¡stored ¡alongside ¡data ¡ Chunk ¡has: ¡ ¡ chunk.lef ¡ 1) lef ¡ptr ¡(to ¡previous ¡chunk) ¡ 2) right ¡ptr ¡(to ¡next ¡chunk) ¡ chunk.right ¡ g ¡ 3) free ¡bit ¡which ¡denotes ¡if ¡chunk ¡is ¡free ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡this ¡reuses ¡low ¡bit ¡of ¡right ¡ptr ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡because ¡we ¡will ¡align ¡chunks ¡ user ¡data ¡ 4) ¡ ¡ ¡user ¡data ¡

  10. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 1 ¡ empty ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  11. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 0 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡); ¡ data1 ¡ ¡ ¡ chunk3.lef ¡ chunk3.right ¡ 1 ¡ empty ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  12. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 0 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡) ¡ ¡ data1 ¡ ¡ b2 ¡= ¡malloc( ¡BUF_SIZE2 ¡) ¡ chunk3.lef ¡ free() ¡ -­‑ Consolidate ¡with ¡free ¡neighbors ¡ chunk3.right ¡ 0 ¡ data2 ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  13. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 1 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡) ¡ ¡ data1 ¡ ¡ b2 ¡= ¡malloc( ¡BUF_SIZE2 ¡) ¡ chunk3.lef ¡ free() ¡ -­‑ Consolidate ¡with ¡free ¡neighbors ¡ chunk3.right ¡ 0 ¡ free( ¡b1 ¡) ¡ ¡ data2 ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  14. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 1 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡) ¡ ¡ data1 ¡ ¡ b2 ¡= ¡malloc( ¡BUF_SIZE2 ¡) ¡ chunk3.lef ¡ free() ¡ -­‑ Consolidate ¡with ¡free ¡neighbors ¡ chunk3.right ¡ 1 ¡ free( ¡b1 ¡) ¡ ¡ free( ¡b2 ¡) ¡ ¡ ¡ data2 ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  15. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 0 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡) ¡ ¡ data1 ¡ ¡ b2 ¡= ¡malloc( ¡BUF_SIZE2 ¡) ¡ chunk3.lef ¡ free() ¡ -­‑ Consolidate ¡with ¡free ¡neighbors ¡ chunk3.right ¡ 1 ¡ free( ¡b1 ¡) ¡ ¡ free( ¡b2 ¡) ¡ ¡ b3 ¡= ¡malloc( ¡BUF_SIZE1 ¡+ ¡BUF_SIZE2 ¡) ¡ ¡ data2 ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  16. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 0 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡) ¡ ¡ data1 ¡ ¡ b2 ¡= ¡malloc( ¡BUF_SIZE2 ¡) ¡ chunk3.lef ¡ free() ¡ -­‑ Consolidate ¡with ¡free ¡neighbors ¡ chunk3.right ¡ 0 ¡ free( ¡b1 ¡) ¡ ¡ free( ¡b2 ¡) ¡ ¡ b3 ¡= ¡malloc( ¡BUF_SIZE1 ¡+ ¡BUF_SIZE2 ¡) ¡ ¡ strncpy( ¡b3, ¡argv[1], ¡BUF_SIZE1+BUF_SIZE2-­‑1 ¡) ¡ data2 ¡ chunk2.lef ¡ NULL ¡ 1 ¡

  17. malloc() ¡ NULL ¡ -­‑ search ¡lef-­‑to-­‑right ¡for ¡free ¡chunk ¡ -­‑ modify ¡pointers ¡ chunk1.right ¡ 0 ¡ b1 ¡= ¡malloc( ¡BUF_SIZE1 ¡) ¡ ¡ data1 ¡ ¡ b2 ¡= ¡malloc( ¡BUF_SIZE2 ¡) ¡ chunk3.lef ¡ free() ¡ -­‑ Consolidate ¡with ¡free ¡neighbors ¡ chunk3.right ¡ 0 ¡ free( ¡b1 ¡) ¡ ¡ b2 ¡ free( ¡b2 ¡) ¡ ¡ b3 ¡= ¡malloc( ¡BUF_SIZE1 ¡+ ¡BUF_SIZE2 ¡) ¡ ¡ strncpy( ¡b3, ¡argv[1], ¡BUF_SIZE1+BUF_SIZE2-­‑1 ¡) ¡ data2 ¡ free( ¡b2 ¡) ¡ With ¡a ¡clever ¡argv[1]: ¡ Interprets ¡b2-­‑8 ¡as ¡a ¡chunk3.lef ¡ write ¡a ¡4-­‑byte ¡word ¡to ¡an ¡ Interprets ¡b2-­‑4 ¡as ¡a ¡chunk3.right ¡ arbitrary ¡loca9on ¡in ¡memory ¡ (b2 ¡-­‑ ¡8)-­‑>lef-­‑>right ¡= ¡(b2-­‑8)-­‑>right ¡ ¡ ¡ chunk2.lef ¡ (b2 ¡-­‑ ¡8)-­‑>right-­‑>lef ¡= ¡(b2-­‑8)-­‑>lef ¡ ¡ ¡ NULL ¡ 1 ¡

  18. What ¡type ¡of ¡vulnerability ¡might ¡this ¡be? ¡ This ¡is ¡very ¡simple ¡example. ¡ Manual ¡analysis ¡is ¡very ¡Fme ¡ consuming. ¡ Security ¡analysts ¡use ¡a ¡variety ¡of ¡ tools ¡to ¡augment ¡manual ¡analysis ¡

  19. Security ¡tools ¡ • TesFng ¡tools ¡for ¡helping ¡find ¡security-­‑criFcal ¡ bugs ¡ – Scanners ¡ – Taint ¡trackers ¡ – Fuzzers ¡ • “dumb”, ¡“smart”, ¡whitebox ¡ – StaFc ¡analysis ¡tools ¡ • StaFc ¡analysis ¡vs. ¡dynamic ¡analysis ¡

  20. Program ¡analyzers ¡ analyze ¡large ¡ ¡ code ¡bases ¡ Code ¡ Report ¡ ¡ Type ¡ Line ¡ 1 ¡ mem ¡leak ¡ 324 ¡ 2 ¡ buffer ¡oflow ¡ 4,353,245 ¡ false ¡alarm ¡ Program ¡ 3 ¡ sql ¡injecFon ¡ 23,212 ¡ Analyzer ¡ 4 ¡ stack ¡oflow ¡ 86,923 ¡ false ¡alarm ¡ 5 ¡ dang ¡ptr ¡ 8,491 ¡ Spec ¡ … ¡ … ¡ … ¡ 10,502 ¡ info ¡leak ¡ 10,921 ¡ poten9ally ¡ ¡ may ¡emit ¡ ¡ reports ¡many ¡ false ¡alarms ¡ warnings ¡ Slide ¡credit: ¡Prof ¡Mitchell ¡Stanford’s ¡CS ¡155 ¡

  21. Program ¡analyzers ¡ • StaFc ¡analysis ¡ – Do ¡not ¡execute ¡program ¡ ¡ • Dynamic ¡analysis ¡ – Execute ¡program ¡on ¡test ¡cases ¡

  22. Soundness, ¡Completeness ¡ Property ¡ Defini9on ¡ Soundness ¡ If ¡the ¡program ¡contains ¡an ¡error, ¡ the ¡analysis ¡will ¡report ¡a ¡warning. ¡ “Sound ¡for ¡reporFng ¡correctness” ¡ ¡ Completeness ¡ If ¡the ¡analysis ¡reports ¡an ¡error, ¡the ¡ program ¡will ¡contain ¡an ¡error. ¡ “Complete ¡for ¡reporFng ¡correctness” ¡ Slide ¡credit: ¡Prof ¡Mitchell ¡Stanford’s ¡CS ¡155 ¡

Recommend


More recommend