angr-PT
Last updated
Last updated
AngrPTμ ν΅μ¬κΈ°λ₯μ λ€μκ³Ό κ°μ΅λλ€.
IOCTL RIPλ²μ μΆμ
IOCTL μ μ½μ‘°κ±΄ λΆμ
μ μλ³μ μ’ μμ± λΆμ
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μ μ μνμ¬ λΆμκ°μ νΈμλ₯Ό μ 곡ν©λλ€.
λΆμ κ²°κ³Όλ λ€μκ³Ό κ°μ΄ λνλ©λλ€.
κ° 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νλλ‘ μ μ©νμμ΅λλ€.
λΆμ κ²°κ³Όλ λ€μκ³Ό κ°μ΄ λνλ©λλ€.