Upload
khoai-dung
View
85
Download
2
Embed Size (px)
Citation preview
tràđáhacking
Symbolic execution
The next chapter of the game
Trà Đá Hacking #3
Nguyễn Minh Hải
Lê Nguyên Dũng
Ngày 15 tháng 1 năm 2017
About me
Nguyễn Minh Hải
• Hiện đang là nghiên cứu sinh tại Đại học Bách Khoa TP.HCM
• Đã có thời gian dài nghiên cứu về mã độc và ứng dụng symbolic
execution
Lê Nguyên Dũng
• zun - botbie team
• Đã có một thời gian dài nghiên cứu về bảo mật qua Zing News
2
Phân tích binary: Hướng tiếp cận thông dụng
• Phân tích tĩnh - Static analysis: Hiểu code bằng mắt
• Phân tích động - Dynamic analysis: Sleep,isDebuggerPresent ... và nhiều chiến lợi phẩm giúp rèn luyện sự
kiên trì khác
• (1) F7, F8, F9, patch ...
• (2) Eureka: Sắp ra rồi
• (3) Làm lại
• (4) Eureka: Gần lắm rồi
• (5) Làm lại
• (6..n) ...
• (n+1) Oh sh!t, flag
3
Why ? (Code example)
1: x = input ();
2: x = x + 5;
3:
4: if (x > 0)
5: y = input ();
6: else
7: y = 10;
8:
9: if (x > 2)
10: if (y == 2789)
11: assert (0); // error
5
Symbolic execution: Giới thiệu
Symbolic execution
Công nghiệp hóa và hiện đại hóa mò nhánh
• Cho phép nhận dạng các điều kiện rẽ nhánh
• Xác định điều kiện đường đi, từ đó giải toán để xác định giá trị cụ
thể để tiếp cận đường đi tương ứng
Ví dụ: Chọn nhánh Error đầu tiên. Ta có điều kiện đường đi:
a+ 5 > 0 ∧ a+ 5 > 2 ∧ b = 2789
⇔a > −3 ∧ b = 2789
7
Symbolic execution: Kiến trúc (2)
Các thành phần thông dụng của một symbolic execution engine:
• Static analysis: Disassembler, có thể có IL (Intermediate Language)
• Dynamic binary instrumentator - DBI: Emulator hoặc một công
cụ phân tích binary động có thể lập trình tương tác được như Pin,
DynamoRio... Phải có cơ chế lưu và trở về một state nhất định
• Symbolic execution - SE: Sử dụng SMT (Satisfiability modulo
theories) để giải các điều kiện đường đi (path condition)
9
Symbolic execution: Làm việc như thế nào ?
• Thành phần SE sẽ tương tác với quá trình thực thi của DBI
• SE nhận dạng các điều kiện sinh biến symbolic
1: x = input (); <-- symbolic here: x = k
2: x = x + 5;
3: x *= 2;
4: if (x > 2)
5: assert (0); <-- target
• Theo dõi các tính toán liên quan tới biến symbolic
2: x = x + 5; <-- x = k + 5
3: x *= 2; <-- x = (k + 5) * 2
• Tại các điểm rẽ nhánh có điều kiện chứa biến symbolic, giải toán
xem nhánh có khả thi không, đồng thời xác định được giá trị của
biến symbolic tương ứng
4: if (x > 20) <-- (k + 5) * 2 > 20
• Nếu muốn duyệt nhiều nhánh, phải cơ chế lưu tại state thực thi hiện
tại và lần lượt đi từng nhánh
10
Symbolic execution: Mayhem
1st Cyber Grand Challenge == Trúng 20 giải đặc biệt xổ số truyền thống
Hình 3: Kiến trúc Mayhem
11
Symbolic execution: Công cụ
• Binary: BitBlaze, Mayhem, S2E, Miasm, Angr, Triton, BINSEC/SE,
BE-PUM (nhà trồng)
• Source: KLEE, CUTE, Otter ...
12
Symbolic execution: Ứng dụng
• Các ứng dụng kiểm thử phần mềm
• Tự động phân tích hành vi malware
• CTF game
13
Symbolic execution: Phân tích malware
Malware thường nhận dạng có đang bị phân tích hay không nhằm che
dấu hành vi nguy hiểm, các kỹ thuật thường sử dụng:
• Yếu tố thời gian
• Hệ thống phân tích chưa hiện thực một số tập lệnh thông dụng: Tập
lệnh xử lý số thực, tập lệnh tạo số ngẫu nhiên ...
• Cơ chế quản lý tiến trình (process) của hệ điều hành
• Kiểm tra có đang bị theo dõi (monitor) hay không
Bằng cách nhận dạng các tập lệnh và các API liên quan, từ đó sinh
ra toán tử ký hiệu tương ứng, SE có thể tiếp cận các đường thực
thi ẩn của mã độc
14
Symbolic execution: Giới hạn
• Nhiều điều kiện đường đi SMT chưa hoặc không thể giải quyết được
md5("cái gì đó") == số_nào_đấy
• Sự bùng nổ số đường đi khả thi
Hình 4: Sự bùng nổ các đường thực thi
15
References i
[1] Nguyen Minh Hai, Mizuhito Ogawa and Quan Thanh Tho,
"Obfuscation code localization based on CFG generation of
malware", The 8th International Symposium on Foundations &
Practice of Security, Springer, Clermont-Ferrand, France, 2015.
[2] Research Topics in Software Quality – Session 1: Lime Concolic
Tester, "http://soft.vub.ac.be/ qstieven/sq/session1.html", 2015.
[3] Hyunmin Seo, Sunghun Kim, "How We Get There: A Context-Guided
Search Strategy in Concolic Testing", 2014.
[4] Dawn Song, David Brumley, Heng Yin, Juan Caballero, Ivan Jager,
Min Gyung Kang, Zhenkai Liang, James Newsome, Pongsin
Poosankam, Prateek Saxena, "BitBlaze: A new approach to computer
security via binary analysis", 4th Information Systems Security, 2008.
References ii
[5] Sang Kil Cha, Thanassis Avgerinos, Alexandre Rebert and David
Brumley, "Unleashing MAYHEM on Binary Code", IEEE Security and
Privacy, 2012.
[6] Yan Shoshitaishvili, Ruoyu Wang, Christopher Salls, Nick Stephens,
Mario Polino, Andrew Dutcher, John Grosen, Siji Feng, Christophe
Hauser, Christopher Kruegel, Giovanni Vigna. "(State of) The Art of
War: Offensive Techniques in Binary Analysis", 2016.
[7] Triton: Dynamic binary analysis, "http://triton.quarkslab.com", 2016.
[8] Robin David, Sébastien Bardin, Thanh Dinh Ta, Laurent Mounier,
Josselin Feist, Marie-Laure Potet, Jean-Yves Marion, "BINSEC/SE: A
Dynamic Symbolic Execution Toolkit for Binary-level Analysis,
SANER 2016.
References iii
[9] Min Gyung Kang, Pongsin Poosankam, and Heng Yin, Renovo: A
Hidden Code Extractor for Packed Executables, 5th ACM Workshop
on Recurring Malcode (WORM), Oct 2007.
[10] Alexander Chailytko, Stanislav Skuratovich, Defeating sandbox
evasion: how to increase the successful emulation rate in your virtual
environment, Virus Bulletin (VB), 2016.