today-0day
NotionGithubSiteContact
Korean
Korean
  • Introduction
    • 🚩Windows Driver 0-day Research
    • πŸ«‚Team. 우리 μ˜€λŠ˜λΆ€ν„° 0-day
  • backgrounds
    • Windows Driver
    • Related Works
  • Our Approach
    • κ°œμš”
    • πŸ‡Init Analyzer
    • 😑angr-PT
    • πŸ₯ŒMS Fuzzer
      • Playmaker mode
      • Qemu-nyx
      • Redqueen
      • Multiple Driver Tracing
      • Call Stack Parser
    • How to Use
  • Appendix
    • References
    • Achievments
    • πŸ”—Team page
    • πŸ”—CODE BLUE 2024
Powered by GitBook
On this page
  • κ°œμš”
  • IOCTL RIP 좔적
  • IOCTL μ œμ•½μ‘°κ±΄ 뢄석
  • μ „μ—­λ³€μˆ˜ 쒅속성 뢄석
  1. Our Approach

angr-PT

PreviousInit AnalyzerNextMS Fuzzer

Last updated 2 months ago

κ°œμš”

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

  • IOCTL RIPλ²”μœ„ 좔적

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

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

IOCTL RIP 좔적

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

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

IDA Hex Rayκ²°κ³Ό μ•„λž˜μ™€ 같이 switch / case문으둜 ν‘œν˜„λ˜λŠ” κ²½μš°λ„ μžˆμ—ˆμ§€λ§Œ,

λŒ€λΆ€λΆ„μ˜ Driverμ½”λ“œκ°€ λ‹€μŒκ³Ό 같이 각 IoControl Codeκ°€ νŠΉμ • λ³€μˆ˜μ—μ„œ Offset을 λΉΌλŠ”μ‹μœΌλ‘œ 계산이 λ˜μ–΄ 뢄석에 큰 어렀움이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

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

뢄석 κ²°κ³ΌλŠ” λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

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

각 IoControl Codeμ—λŠ” μ„œλ‘œ λ‹€λ₯Έ μ œμ•½ 쑰건이 있고, 각 μ œμ•½μ‘°κ±΄μ„ λΆ„μ„ν•˜λŠ” λ°μ—λŠ” μ‹œκ°„μ΄ μƒλ‹Ήνžˆ μ†Œμš”λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ‹œκ°„μ†Œλͺ¨λ₯Ό 쀄이기 μœ„ν•΄ Symbolic Execution을 μ μš©ν•˜μ—¬ IRPꡬ쑰체의 IoStatus Codeλ₯Ό Symbolic Variable둜 λ§Œλ“¦μœΌλ‘œμ¨ 각 IOCTL의 μ œμ•½μ‘°κ±΄μ„ μžλ™μœΌλ‘œ λΆ„μ„ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

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

μ œμ•½μ‘°κ±΄μ„ κ΅¬ν•˜κΈ° μœ„ν•œ 기쀀은 μ•„λž˜ 기쀀에 따라 νŒλ‹¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

뢄석 κ²°κ³ΌλŠ” λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.


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

일뢀 Kernel DriverλŠ” IOCTL κ°„ μ’…μ†μ„±μœΌλ‘œ 인해 버그가 λ°œμƒν•˜λŠ” κ²½μš°λ„ μ‘΄μž¬ν•©λ‹ˆλ‹€.

이 λ•Œ '쒅속성'μ΄λž€ 이전 μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όκ°€ λ‹€μŒ μ½”λ“œμ˜ 결과에 영ν–₯을 λ―ΈμΉ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ case C: μ—μ„œ λ°œμƒν•˜λŠ” BUG(); κ°€ 트리거되기 μœ„ν•΄μ„œλŠ” case A:, case B:κ°€ 순차적으둜 λ¨Όμ € νŠΈλ¦¬κ±°λ˜μ—ˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

Kernel Driverμ—μ„œμ΄λŸ¬ν•œ 쒅속성은 λ™μΌν•œ μ „μ—­λ³€μˆ˜λ₯Ό κ³΅μœ ν•œλ‹€λŠ” νŠΉμ§•μ—μ„œ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. MS Fuzzerμ—μ„œλŠ” Symbolic Execution을 μ μš©ν•˜μ—¬ IOCTL을 κ·Έλ£Ήν™”ν•˜μ˜€κ³ , 이λ₯Ό κ³ λ €ν•˜μ—¬ Fuzzingν•˜λ„λ‘ μ μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

뢄석 κ²°κ³ΌλŠ” λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

😑