0x002 หลักคิด Reverse Engineer ของผม

สั้นๆ มันคือคำว่า "เรารู้มากแค่ไหนว่าสิ่งนี้มันทำงานยังไง ?"

เรากำลังจะทำอะไร ? เพื่อให้ได้อะไร ? และเรารู้อะไรแล้วบ้างมากน้อยแค่ไหน ?
ถ้าชีวิตมีอย่างอื่นต้องทำมากมาย เช่น ดูแลตัวเอง ดูแลครอบครัว หรือแม้แต่การต้องแบ่งเวลาไปออกกำลังกายบ้าง ฯ
เราก็อย่าเพิ่งกระโจนไป Reverse Engineer โดยทันที , แต่ให้หาองค์ประกอบต่างๆโดยรอบให้มากพอก่อน

เช่น
ณ เวลานี้ เรารู้มั้ยว่าสิ่งนี้ อันตรายหรือไม่อันตราย เรา "ฟันธงเลย" ได้มั้ย ?
เรารู้มั้ยว่าเราจะไปหาข้อมูลประกอบของสิ่งๆนี้ มันยากหรือง่าย แค่ไหน ?
เรา "อยากได้" อะไรจากมันหากเราทำการลงมือ reverse engineer ?

สำหรับผมแล้วหลักคิดคือ การเดินทางที่ไม่ต้องเร็วมาก ค่อยๆทำความเข้าใจองค์ประกอบของสิ่งนั้นไปทีละอย่าง
เดินทางจนกระทั่ง ถึงปลายทางสิ่งที่ reverse engineer จะได้ output ออกมานั่นก็คือ "บันทึกผลลัพธ์ว่าวิธีที่คนออกแบบและสร้างสิ่งนั้นขึ้นมา เขาคิดอะไร"
นี่คือสิ่งที่ผมทำ

ในเว็บไซต์นี้จะมีขอบเขตของ reverse engineer ที่พูดในบริบทเกี่ยวกับ Cybersecurity เป็นหลัก
เช่น
OS Scope : Microsoft Windows เป็นหลัก
CPU Architecture Scope : x86-64 เท่านั้น
Software Target : Malware , Application Flow, Offensive Security Exploitation tools

ไม่มี CPU : ARM เช่นพวกตระกูล iOS / android หรือ Raspberry PI ต่างๆ
ก็ต้องขออภัยด้วยครับหากใครกำลังจะมองหา scope อื่นๆ นอกจากนี้

ทีนี้พอเราเข้าสู่ reverse engineer มันก็มักจะมาคู่กับเรื่อง Cybersecurity เป็นส่วนใหญ่
เพราะ Application ที่ต้องใช้วิธีการ reverse Engineer มักจะเป็น Application มุ่งร้าย
หรือ malware นั่นเอง

เพราะ malware developer ต้องสร้างไฟล์อันตรายที่

  • ทำลายระบบที่เขาต้องการได้จริง
  • หลบเลี่ยงการตรวจจับจาก antivirus / firewall / ระบบป้องกันต่างๆ ได้
  • แม้จะโดนหาไฟล์ malware จนเจอ และผู้ตรวจจับจะทำการ reverse ไฟล์ malware นี้เป็นขั้นตอนต่อไป / malware developer ก็จะต้องป้องกันการ reverse หรือ debugging ไว้อีกชั้นให้ได้ เช่น การทำ code obfuscated / anti forensic / anti debugging ต่างๆ ไปให้ถึงขีดสุดของการต่อสู้
https://www.sans.org/blog/how-you-can-start-learning-malware-analysis/
https://www.sans.org/blog/how-you-can-start-learning-malware-analysis/

การ reverse engineer malware ถือเป็นยอดพีระมิดของการหาว่าคำสั่งอันตรายที่ malware ซ่อนไว้มันอยู่ที่ไหนอย่างไร , Malware developer จะพยายามพัฒนาโค้ดที่ดีมากขึ้น เพื่อที่จะหลบซ่อนจากการตรวจจับและป้องกัน และยังคงทำสิ่งอันตรายได้
ส่งผลให้วิธีด้านล่างของฐานพีระมิด ถ้าเป็น malware ทั่วไป ก็จะหาคำสั่งหรือกลไกอันตรายไม่เจอ, วิธีการ reverse จึงจะเป็นคำตอบสุดท้ายนั่นเอง
แล้วจะหาเจอเมื่อไหร่ อย่างไรนั้น ก็ขึ้นอยู่กับเครื่องมือ , ความสามารถของคน reverse , และสิ่งที่สำคัญที่สุด "เวลา"

ในอีกมุมหนึ่ง
application ปกติที่ทำงานที่ไม่ใช่ malware หรือ application ที่เรา "เชื่อได้แน่ๆว่ามันปลอดภัย"
หากเราสามารถ reverse engineer ได้ เราก็จะได้อะไรหลายอย่าง เช่น

  • เข้าใจ application flow มากขึ้น หรือเข้าใจแบบทะลุปรุโปร่ง
  • มีข้อมูลเป็นจุดเริ่มต้น ของการหาช่องโหว่บน Software นั้นๆ ได้ หรือทำสิ่งที่เรียกว่า Vulnerability Research ได้ (หาช่องโหว่ของโปรแกรม) ซึ่งถ้าเราเข้าใจและหาได้แล้ว
    ก็อาจจะนำไปแจ้งเจ้าของ application ได้ เช่น เพื่อนๆ ของเราที่เป็นทีม dev / ฝ่าย production ของเราต่างๆ
    หรืแ้มแต่นำไปแจ้งผู้ผลิต application นั้นๆก็ได้ ขาจะให้ค่าตอบแทนเป็นเงินกลับมาแก่เรา สิ่งนี้เรียกว่า Bug Bounty ซึ่งมี platform ให้เราเข้าไปใช้งานเป็นระบบระเบียบดีทีเดียว

หรือถ้าเราทำงานด้าน Offensive Security , เป็นสายบุก เป็นนักเจาะระบบ การหาข้อมูลช่องโหว่ของ Software ก็ทำให้เราสามารถมีข้อมูลมากพอที่จะนำมาพัฒนาเครื่องมือการโจมตีระบบของ Software นี่้ ที่เฉพาะเจาะจงได้ เราอาจจะสร้างขึ้นมาเองเลยโดยเฉพาะ
ทำให้โอกาสการโจมตี สำเร็จสูงมากขึ้น หรือโจมตีแม่นยำได้มาก จนไม่ทำให้ระบบเดิมที่กำลังใช้งานอยู่พังลงไป เหมือนที่ผมเขียนไปข้างบนว่าสิ่งนี้มันคือ Offensive Security Exploitation tools ต่างๆ

ถ้าภาษารถแข่ง มันก็คือการรื้อรถทั้งคัน เพื่อทำความเข้าใจว่าวิศวกร ออกแบบรถคันนี้มาเพื่ออะไรและให้ได้อะไร
แต่ถ้าเราจะใช้ประโยชน์ (exploit) รถคันนี้ เช่นเอาไปแข่งให้แรงขึ้น เราก็จะทำการ hack มัน
ปรับแต่งรถ จากข้อมูลที่เรา รื้อรถมาทั้งคัน (reverse engineer) มาดู พอเราเข้าใจแล้ว
เราก็จะรู้ว่าเราจะเติมอะไรตรงไหนเท่าไหร่ เราจะตัดอะไรออก เพื่อให้รถคันนี้มันแรงพอที่จะแข่งได้ หรือมันก็แรงพอแต่มันก็ยังปลอดภัย ขับได้ไกลมากขึ้น

แล้วแต่จุดประสงค์ที่เราลงมือ เพราะเราเข้าใจกลไก application ในแก่นมันจริงๆ นั่นเอง

MITRE ATT&CK framework ที่สำคัญมากในการให้หลักคิดของการ reverse engineer
ไมเต้อร์ แอ็ทแท็ค คือ framework สำหรับใช้อธิบายขั้นตอน หรือ แจกแจง ลำดับ ของกระบวนการโจมตีทางไซเบอร์ , framework นี้ได้รับความนิยมมาก แทบจะเรียกได้ว่าเป็นมาตรฐานกลางเลยทีเดียว
เพราะคนที่ป้องกันระบบ หากนำ framework นี้ไปใช้ก็สามารถแยกแยะขั้นตอนที่เกิดขึ้นได้ ตั้งแต่เริ่มต้นก่อนจะโจมตีจนถึง , ไปจนถึง execution และอะไรหลังจากนั้น จนเกิดผลกระทบที่อันตราย
ส่วนคนที่โจมตีระบบ ก็สามารถ "เลือก" พัฒนาเครื่องมือ หรือ วิธีการที่ตัวเองถนัด ในแต่ละขั้นตอนของ framework ได้ ไม่จำเป็นที่จะต้องทำสิ่งที่ครบ loop ทั้ง framework ก็ได้

ที่เห็นพีระมิด และคำว่า TTPs ก็มาจากสิ่งนี้แหละ MITRE ATT&CK framework โดยคำว่า TTPs มีคำเต็มๆคือ Tactics, Techniques, and Procedures

T ตัวที่ 1 มากจากคำว่า Tactics
คือ "ผลลัพธ์สำเร็จของขั้นตอน" ที่ผู้โจมตีคาดหวัง ว่าเขาคาดหวังให้เกิด Tactics อะไรใน loop การโจมตีที่อันตรายครั้งนี้ เช่น การยกระดับสิทธิ์ (Privilege Escalation) หากแท็คติกส์นี้สำเร็จเขาก็สามารถไปสู่ขั้นตอนถัดไปได้ (หรืออาจจะพอแค่นี้ก็ได้ เพื่อพิสูจน์อะไรบางอย่างของระบบ แค่นั้น)

T ตัวที่ 2 มาจากคำว่า Techniques
คือ "วิธีการสักวิธีนึง" ที่ผู้โจมตี "เลือกมาใช้" ในการดำเนินการเพื่อให้สัมฤทธิ์ผลกับสิ่งที่ตรงกับ Tactics นั้นๆ ที่เขากำลังเดินทางมาถึง , ซึ่งใน Tactics นั้นที่จะสำเร็จได้ ผู้โจมตีอาจจะมีหลายวิธีให้เลือกก็ได้ (หลายเทคนิค) เช่น การยกระดับสิทธิ์อาจจะมีวิธีรัน Code Injection จาก app สิทธิ์ต่ำ พอใช้เทคนิคนี้สำเร็จ ผู้โจมตีก็มีสิทธิ์ที่สูงขึ้นทันที , หรือถ้างั้นเขาก็ "เลือกเทคนิคอื่น" เขาอาจจะใช้วิธี "โทรไปหาคนดูแลระบบเพื่อหลอกขอรหัสผ่านของ user สิทธิ์สูง" ก็ได้ เมื่อเขาได้รหัสมา ก็บรรลุ Tactics Privilege Escalation ด้วย Techniques Social Engineer เป็นต้น

P ตัวที่ 3 มาจากคำว่า Procedures
คือ "ขั้นตอนจริง" วิธีการจริงๆ ในรายละเอียดเลย ณ กระบวนการสั้นๆ นั้นๆ ว่าทำยังไง TCP port อะไร , Encryption ด้วย Algorithms อะไร , ขนไฟล์ (exfiletration) ออกไปข้างนอกโดยปลายทางเป็นอะไรเช่น cloud storage drive แบบนั้น นั่นเอง

และการเติม s ที่ท้าย TTP กลายเป็น TTPs เนี่ยแปลว่า
มันมีหลาย (Tactics) มีหลาย (Techniques) มีหลาย (Procedures)
ก็เลยเป็น TTPs นั่นเอง , และเรามักจะเห็นรหัส TTPs ในเครื่องมือตรวจจับ Cybersecurity ต่างๆ เพื่อ map กับ TTPs ให้เราเห็นลำดับและเข้าใจ "สิ่งที่เกิดก่อนหน้า" และ "สิ่งที่จะเกิดขึ้นต่อไปหลังจากนี้" เข้าใจได้่ง่ายมากขึ้น

หลักคิดในการ reverse ก็อยู่ใน TTPs
เพราะสิ่งที่คนคิดร้ายต้องการ มีจุด critical ยอดพีระมิดสูงสุดที่จะเกิดขึ้นในระบบ นั่นก็คือ
"เขาต้องการ ให้เกิด execute โปรแกรมอันตราย ในระบบของเราให้ได้ โดยไม่สนวิธีการ"

และเราผู้เป็นคน Reverse Engineer เราจะต้องตามหาความคิดนั้นของเขาให้ครบ

 

เมื่อเราลงมือ reverse engineer โดยเฉพาะ malware แล้วมี framework นี้กำกับใน mind set ของเรา
การ reverse จะง่ายขึ้น เพราะเราอยู่ในพื้นฐาน concept ที่คาดเดาได้ว่า จังหวะนี้คืออะไร จะเกิดอะไรขึ้นตอน execution และ ก่อนการ execute มันจะมีการเตรียมอะไร
และหลังการ execute จะมีอะไรต่อไป

Leave a Reply

Your email address will not be published. Required fields are marked *