😑angr-PT

κ°œμš”

AngrPT의 핡심기λŠ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • IOCTL RIPλ²”μœ„ 좔적

  • IOCTL μ œμ•½μ‘°κ±΄ 뢄석

  • μ „μ—­λ³€μˆ˜ 쒅속성 뢄석

IOCTL RIP 좔적

λ§Žμ€ λ“œλΌμ΄λ²„κ°€ IoControl을 μ΄μš©ν•˜μ—¬ μœ μ €μ™€ μƒν˜Έμž‘μš©μ„ ν•˜κΈ° λ•Œλ¬Έμ— Windows Driver의 뢄석에 μžˆμ–΄μ„œ κ°€μž₯ μ€‘μš”ν•œ 것은 λ“œλΌμ΄λ²„κ°€ νŠΉμ • IoControl Codeλ₯Ό 톡해 μ–΄λ– ν•œ λ™μž‘μ„ ν•˜λŠ”μ§€ μ‹λ³„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

IDA Hex Rayκ²°κ³Ό μ•„λž˜μ™€ 같이 switch / case문으둜 ν‘œν˜„λ˜λŠ” κ²½μš°λ„ μžˆμ—ˆμ§€λ§Œ, λŒ€λΆ€λΆ„μ˜ Driverμ½”λ“œκ°€ 각 IoControl Codeκ°€ νŠΉμ • λ³€μˆ˜μ—μ„œ Offset을 λΉΌμ„œ 계산이 λ˜μ–΄ 뢄석에 큰 어렀움이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ•Œλ¬Έμ— μ €ν¬λŠ” 각 IoControl Codeλ₯Ό μ‹λ³„ν•˜κ³  IDA Hex Rayκ²°κ³Όμ—μ„œ IoControl Code별 λ°”μ΄λ„ˆλ¦¬μƒμ˜Offset을 μ œμ‹œν•˜μ—¬ λΆ„μ„κ°€μ˜ 편의λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

IOCTL μ œμ•½μ‘°κ±΄ 뢄석

λ“œλΌμ΄λ²„κ°€ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ§€μ›ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ κ²ŒλŠ” λͺ‡ 개 λ§Žκ²ŒλŠ” μˆ˜μ‹­κ°œμ˜ IoControl Codeλ₯Ό κ°€μ§‘λ‹ˆλ‹€.

ex) λ°±μ‹  λ“œλΌμ΄λ²„μ˜κ²½μš° 50개 μ΄μƒμ˜ IOCTL이 μžˆμ—ˆμŒ.

각 IoControl Codeμ—λŠ” μ„œλ‘œ λ‹€λ₯Έ μ œμ•½ 쑰건이 있고, 각 μ œμ•½μ‘°κ±΄μ„ λΆ„μ„ν•˜λŠ” λ°μ—λŠ” μ‹œκ°„μ΄ μƒλ‹Ήνžˆ μ†Œμš”λ©λ‹ˆλ‹€.

λ§Žμ€ μ œμ•½μ‘°κ±΄μ„ λΆ„μ„ν•˜λŠ”λ°μ— μ‹œκ°„μ„ 쀄이기 μœ„ν•΄ Symbolic Execution을 μ΄μš©ν•˜μ—¬ 각 IOCTL별 μ œμ•½μ‘°κ±΄μ„ λΆ„μ„ν–ˆμŠ΅λ‹ˆλ‹€.

λΆ„μ„λœ μ œμ•½μ‘°κ±΄μ€ Fuzzingκ³Όμ • 쀑에 μœ νš¨ν•œ μ½”λ“œ 뢀뢄을 μ‹€ν–‰ν•˜μ—¬ 더 높은 컀버리지λ₯Ό μ–»κ³  더 λ§Žμ€ Crashλ₯Ό λ°œκ²¬ν•  ν™•λ₯ μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

정상적인 μ œμ•½μ‘°κ±΄μ„ κ΅¬ν•˜κΈ° μœ„ν•œ 기쀀은 IRPꡬ쑰체의 IoStatus Codeλ₯Ό Symbolic Variable둜 λ§Œλ“€μ–΄ μ•„λž˜ 기쀀에 따라 νŒλ‹¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ „μ—­λ³€μˆ˜ 쒅속성 뢄석

100개 μ΄μƒμ˜ λ“œλΌμ΄λ²„λ₯Ό λΆ„μ„ν•˜λ©΄μ„œ IoControl Codeκ°„μ˜ μ’…μ†μ„±μœΌλ‘œ μΈν•œ 버그 μΌ€μ΄μŠ€λ„ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 버그 μΌ€μ΄μŠ€λ“€μ˜ νŠΉμ§•μ€ λ™μΌν•œ μ „μ—­λ³€μˆ˜ 곡유 λΌλŠ” νŠΉμ§•μ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ „μ—­λ³€μˆ˜μ’…μ†μ„±μœΌλ‘œ μΈν•œ 버그 μΌ€μ΄μŠ€λ„ Fuzzing κ³Όμ • 쀑에 μ‹λ³„ν•˜κΈ° μœ„ν•΄ Angrλ₯Ό μ΄μš©ν•΄ λ™μΌν•œ μ „μ—­λ³€μˆ˜λ₯Ό κ³΅μœ ν•˜λŠ” IoControl Codeλ₯Ό κ·Έλ£Ήν™”ν–ˆμŠ΅λ‹ˆλ‹€.

κ·Έλ£Ήν™”λœ IoControl Code듀은 이후 Fuzzingλ‹¨κ²Œμ—μ„œ 쒅속성을 κ³ λ €ν•œ 버그 μΌ€μ΄μŠ€λ₯Ό μ°ΎλŠ”λ°μ— μ‚¬μš©λ©λ‹ˆλ‹€.

Last updated