DEV Community

Cover image for มาตรวจดูกันว่า iOS Project เราใช้ dependencies อะไรที่เป็นอันรายหรือไม่ด้วย OWASP Dependency-Check
Wasith Theerapattrathamrong
Wasith Theerapattrathamrong

Posted on • Updated on

มาตรวจดูกันว่า iOS Project เราใช้ dependencies อะไรที่เป็นอันรายหรือไม่ด้วย OWASP Dependency-Check

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

ทำยังไง

  1. ติดตั้ง dependency-check โดยสามารถติดตั้งผ่าน Homebrew ด้วยคำสั่ง brew install dependency-check
  2. ทำการ 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

Latest comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.