OWASP Dependency-Chek
td;lr ไปดูตัวอย่าง repo ได้ที่นี่ https://github.com/PH9/MadeForScan
ทำความรู้จัก OWASP Dependency-Check
เป็นเครื่องมือตรวจสอบว่าเราใช้ dependencies ที่มีช่องโหว่ที่รู้แล้ว (Common Vulnerabilities and Exposures: CVE) หรือไม่ เมื่อตรวจสอบแล้วจะทำการสร้างรายงานให้เราดูต่อไป
โดย Dependency-Check เกิดขึ้นมาเพราะว่า OWASP Top 10 (การจัดอันดับสิ่งที่นักพัฒนาชอบทำพลาด ซึ่งส่งผลให้เกิดให้ช่องโหว่ และการโจมตี) ในปี ค.ศ. 2013 พบว่ามีการใช้งานเครื่องมือ หรือชุดคำสั่งที่มีช่องโหว่ อยู่ในลำดับที่ 9
ทำยังไง
- ติดตั้ง
dependency-check
โดยสามารถติดตั้งผ่าน Homebrew ด้วยคำสั่งbrew install dependency-check
- ทำการ scan ด้วยคำสั่ง
dependency-check --enableExperimental -s . -o .
ง่ายมะ... แต่เดี๋ยวก่อน!
อธิบายคำสั่ง
-
--enableExperimental
เป็นการเรียกใช้ features ของ Dependency-Check อยู่ยังอยู่ระหว่างการทดสอบ ซึ่ง Coacoapods และ Swift Package Manager ยังเป็น experimental อยู่ -
-s, --scan <path>
คือการบอกว่าให้ทำการตรวจสอบที่ path นี้ -
-o, --out <path>
คือให้ออกรายงานที่ path นี้
โดย default แล้วรายงานจะออกมาเป็น html โดยเราสามารถเลือกได้เป็น HTML, XML, CSV, JSON, JUNIT, หรือ ALL (ทั้งหมด) ด้วยคำสั่ง -f, --format <format>
ทำอะไรได้เพิ่มอีกบ้าง
-
--junitFailOnCVSS <score>
ระบุว่าจะให้ต้อง score เท่าไหร่ถึงจะผ่านถ้าเอาไปใส่ใน build pipelines ซึ่งจะมีตั้งแต่ 0-10 (ยิ่งต่ำยิ่งดี) ถ้าไม่ระบุ default จะอยู่ที่ 11 ซึ่งแปลว่าผ่านตลอดนั่นเอง โดยคำสั่งนี้จะต้องไว้ข้างหน้า-s <path>
ไม่งั้นอาจจะไม่ทำงานได้ -
--suppression <file>
เป็นการให้ dependency-check ไปอ่านไฟล์ที่รวบรวมรายชื่อ CVE ที่ไม่สนใจได้ โดยโครงสร้างของไฟล์หน้าตาประมาณนี้
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.2.3.xsd">
<suppress>
<notes><![CDATA[
file name: GoogleUtilities/AppDelegateSwizzler:6.5.2
]]></notes>
<sha1>368d339f66194780a65f3e55481ef29a35971cc2</sha1>
<cve>CVE-2005-0036</cve>
</suppress>
<suppress>
<notes><![CDATA[
file name: GoogleUtilities/AppDelegateSwizzler:6.5.2
]]></notes>
<sha1>368d339f66194780a65f3e55481ef29a35971cc2</sha1>
<cve>CVE-2005-0861</cve>
</suppress>
</suppressions>
ถามว่าเราจะรู้ได้ไงว่าจะ ignore ยังไง ตอนที่ Dependency-Check ออก report ถ้าเป็น HTML จะมี ปุ่มสีเทา ๆ เขียนว่า suppress
ให้คลิก และสามารถคัดลอก xml เพื่อมาใส่ได้
ถ้าในโปรเจคคุณมี Gemfile, Gemfile.lock
- คุณอาจจะต้องติดตั้ง bundle-audit ด้วย โดยสามารถติดตั้งได้โดยคำสั่ง
[sudo] gem install bundle-audit
เพื่อให้สามารถตรวจสอบได้ เพราะ Dependency-Check ใช้โปรแกรม bundle audit ในการตรวจสอบ gem - หรือใช้คำสั่ง
--disableBundleAudit
ไปซะเลย เพราะยังไง gem จะไม่ถูกรวมเข้าไปใน ipa อยู่แล้ว
อ่านต่อ: เราไม่ควรใช้ “sudo gem”!!
Dependencies อะไรที่เกี่ยวกับการพัฒนา iOS แล้ว scan ไม่ได้
- Dependencies ที่มาจาก Carthage
- Dependencies ที่มาจาก Homebrew ซึ่งก็ไม่น่าเป็นห่วง เพราะส่วนนี้ไม่ได้ใช้ในโปรเจคอยู่แล้ว
- Dependencies ที่มาจากการ copy ไฟล์
.framework
,.a
,.o
มาวาง - และจาก Git Submodules
สรุปคือตรวจได้แค่ใน Gemfile.lock
กับ Podfile.lock
และจาก Swift Package Manager เท่านั้น 🤣🤣
รู้ว่ามีช่องโหว่ แล้วเอาไปทำอะไรได้บ้าง
- ใช้เป็นข้ออ้างว่า dependencies มีช่องโหว่ เพื่อทำการอัพเดท dependencies ที่ใช้ เพราะบางที่ไม่ยอมให้อัพบ่อย ๆ
- หรือกลับกัน บางที่นักพัฒนาเองทำงานไปเรื่อย ๆ ไม่เคยอัพเดท dependencies เลย
- ยกระดับมาตรฐานของโปรแกรมที่พัฒนา
- ออกคำเตือนสำหรับผู้ใช้โปรแกรมเวอร์ชั่นเก่า ๆ ให้ทำการอัพเดท
ส่วนใหญ่ถ้า CVE ออก มันจะมีการแก้ไขก่อนเปิดเผย หรือแก้ไขตามมาในไม่นาน และหลาย ๆ ครั้งการแก้บัคใน open-sources จะมี commit ให้ดูว่าแก้ตรงไหนไป ทำให้ hacker สามารถ reverse engineer ดูได้ง่ายว่าจะทำการโจมตีอย่างไร
ป.ล.
- จะบอกก่อนว่าตัวที่ทำ static scan นั้น มีหลายตัวมาก แต่เจิม dev.to ด้วย OWASP Dependency-Check ก่อนแล้วกัน
- OWASP Dependency-Check ตรวจสอบโปรเจคอื่น ๆ นอกจาก iOS ได้ด้วยนะ เยอะเลยลองไปเล่นกันอยู่ได้
- dev.to ใช้ Markdown format ซึ่งผมชอบเป็นการส่วนตัวอยู่แล้ว แต่พอบทความเป็นภาษาไทยมันจะดูอ่านยากแปลก ๆ นะ 555
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.