ยินดีต้อนรับ! ที่เก็บนี้เป็นส่วนหนึ่งของชุดโพสต์บล็อกนี้เกี่ยวกับเทคนิคการรักษาความปลอดภัย API ที่ใช้งานได้จริง ซีรีส์นำคุณผ่านกระบวนการปกป้องแบ็กเอนด์ API มือถือจากการหาประโยชน์ต่าง ๆ ซึ่งผู้โจมตีอาจใช้เพื่อเข้าถึงข้อมูลที่ถืออยู่ ในสถานการณ์การสาธิตนี้การโจมตีช่วยให้ผู้ใช้จริงของระบบได้รับความได้เปรียบทางธุรกิจที่ไม่เป็นธรรมในค่าใช้จ่ายของ บริษัท
ที่เก็บนี้มีทั้งสามองค์ประกอบที่ใช้เพื่ออธิบายเรื่องราวของเรือเร็ว:
เราได้เก็บโครงการทั้ง 3 โครงการไว้ในที่เก็บเดียวกันและจัดโครงสร้างรหัสเพื่อรวมทุกขั้นตอนจากการก้าวหน้าของชุดบล็อก เราหวังว่าสิ่งนี้จะทำให้เข้าใจได้ง่ายขึ้นโดยรวม
หลังจากตั้งฉากในโพสต์บล็อกแรกรายการต่อเนื่องแสดงให้เห็นว่ามาตรการรักษาความปลอดภัยอาจเพิ่มความแข็งแกร่ง (หรือบายพาส) โดยใช้ลิงก์ไปยังรหัสในที่เก็บ GitHub นี้ตามความเหมาะสม ชุดบล็อกอาจสรุปได้โดยอ้างถึงวิธีการรักษาความปลอดภัยหลักภายใต้การสนทนาในแต่ละรายการ:
เราให้การปรับใช้บริการและ APK ทั้งสองที่พร้อมใช้งานเพื่อให้คุณดาวน์โหลดและติดตั้งเพื่อให้คุณสามารถทำงานกับพวกเขาได้เมื่อคุณอ่านบล็อก ส่วนต่อไปนี้ให้ข้อมูลสรุปสั้น ๆ เกี่ยวกับบริการที่เราได้ปรับใช้แอพที่เราให้ไว้ซึ่งจะค้นหารหัสที่เกี่ยวข้องในที่เก็บนี้และที่ที่มีการเปลี่ยนแปลงสำหรับโพสต์บล็อกแต่ละโพสต์
รหัส API shipfast สามารถพบได้ในโฟลเดอร์เซิร์ฟเวอร์/shipfast-api รหัสถูกปรับใช้ในคลาวด์และมีให้ที่ https://shipfast.demo.approov.io
API SHOPFAST นั้นมีรูปแบบจาก v1 ถึง v4 เพื่อติดตามเรื่องราวของบล็อกและคุณสามารถเข้าถึงแต่ละขั้นตอนโดยใช้ URL ต่อไปนี้:
หน้ารีลีสของที่เก็บนี้มี APK สำหรับแต่ละขั้นตอน พวกเขาได้รับการตั้งค่าเพื่อให้คุณสามารถติดตั้งทั้งหมดได้พร้อมกันบนอุปกรณ์ Android ของคุณ (ขออภัยไม่มี iOS ในขณะนี้)
รหัสสำหรับแอพทั้งหมดในโครงการ Androidstudio หนึ่งโครงการ: App/Android/Kotlin/Shipfast
เราใช้โทนสีที่แตกต่างกันในแต่ละเวอร์ชันของแอพเพื่อให้คุณสามารถระบุได้อย่างรวดเร็วว่าอันไหนกำลังทำงานอยู่:
สีไม่มีความหมายพิเศษใด ๆ แต่เห็นได้ชัดว่าสีเขียวดีที่สุด
บริการเว็บอันธพาล Shipraider ได้รับการตั้งค่าโดยโจรสลัดชั่วร้ายเพื่อช่วยให้ผู้ขับขี่เรือบรรทุกสินค้าใช้ประโยชน์จากการรับเงินของลูกค้าที่รวดเร็ว รหัสสามารถพบได้ในโฟลเดอร์เซิร์ฟเวอร์/shipraider-rogue-web
เว็บไซต์แต่ละรุ่นให้บริการจากโดเมนอื่น:
เว็บไซต์ Shipraider เป็นไปตามโทนสีเดียวกันกับแอพมือถือเพื่อแยกความแตกต่างระหว่างรุ่น
ด้านล่างเราให้ภาพรวมโดยย่อของเทคนิคที่ใช้ในซีรีย์บล็อกเพื่อล็อค API ด้วยลิงก์ไปยังบรรทัดที่เกี่ยวข้องของรหัสและโพสต์บล็อกที่เกี่ยวข้อง
วิธีที่พบบ่อยที่สุดที่นักพัฒนาใช้เพื่อระบุ สิ่งที่ กำลังร้องขอไปยังเซิร์ฟเวอร์ API คือการใช้สตริงยาวในส่วนหัวคำขอส่วนใหญ่มักเรียกว่า Api-Key ดูโพสต์บล็อกแรก
คีย์ API นั้นง่ายมากที่จะนำไปใช้ในทั้งเซิร์ฟเวอร์และไคลเอนต์ รหัสแอพนี้จะเพิ่มคีย์ให้กับทุกคำขอและเซิร์ฟเวอร์ตรวจสอบการร้องขอด้วยการตรวจสอบส่วนหัวอย่างง่ายตามที่แสดงโดยรหัสนี้
น่าเสียดายที่การข้ามการป้องกันคีย์ API นั้นง่ายเช่นกันเนื่องจากเป็นความลับที่สื่อสารในทุกคำขอ บล็อกที่สองในซีรีส์เริ่มต้นด้วยการแสดงวิธีการแยกคีย์ API ด้วยการโจมตี MITM (Man in the Middle) คีย์จะถูกเพิ่มเข้าไปในเว็บไซต์ Shipraider ที่จะใช้ในคำขอที่ส่งต่อ API ของ Shipfast
เพื่อปรับปรุงการป้องกันโพสต์บล็อกที่สองแนะนำ HMAC เพื่อลงนามในการร้องขอ API แบบดิจิทัลและดังนั้นจึงป้องกันไม่ให้พวกเขาถูกจี้หรือดัดแปลง มันดีกว่าคีย์ API เนื่องจาก ส่วนลับ ไม่เคยถูกส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์อย่างชัดเจนและในรุ่นนี้จะถูกฝังอยู่ในรหัส
การใช้งาน HMAC นั้นมีความซับซ้อนมากกว่าการใช้งานคีย์ API เล็กน้อย แต่ก็ยังง่าย คุณสามารถตรวจสอบรหัสนี้สำหรับการใช้งานเซิร์ฟเวอร์ API และรหัสนี้สำหรับการใช้งานแอพมือถือ
อย่างไรก็ตามหาก HMAC Secret เป็นรหัสที่ยากมันก็ยังง่ายสำหรับผู้โจมตีที่จะสกัด โพสต์บล็อกที่สามแสดงให้เห็นถึงสิ่งนี้โดยใช้เครื่องมือวิเคราะห์ไบนารีโอเพ่นซอร์สเพื่อเปิดเผย HMAC Secret และอัลกอริทึมที่เกี่ยวข้องที่ใช้ในการลงนามในคำขอ เมื่อสิ่งเหล่านี้ถูกคัดลอกไปยังรหัส Shipraider เว็บไซต์ Rogue จะสามารถทำงานได้อีกครั้ง
สถานการณ์การโจมตีครั้งที่สองเปิดเผยว่าการใช้ความลับแบบคงที่สำหรับอัลกอริทึม HMAC เป็นจุดอ่อน การป้องกันครั้งต่อไปคือการใช้ความลับแบบไดนามิก หนึ่งที่คำนวณได้ที่รันไทม์ โพสต์บล็อกที่สามอธิบายวิธีการรวมความลับแบบคงที่กับข้อมูลแบบไดนามิกเพื่อให้ได้ความลับแบบไดนามิกที่จะเริ่มต้นอัลกอริทึม HMAC
การใช้งานสำหรับแอพมือถือสามารถเห็นได้ในบรรทัดของรหัสเหล่านี้ในขณะที่เซิร์ฟเวอร์ API เทียบเท่าสามารถดูได้ที่นี่
การคำนวณ HMAC Secret at Runtime ทำให้ยากที่จะข้าม แต่ไม่สามารถทำได้ ตอนนี้ผู้โจมตีต้องเข้าใจส่วนที่ใหญ่กว่าของรหัสเพื่อทำซ้ำพฤติกรรมในเว็บไซต์ Shipraider โพสต์บล็อกที่สี่แสดงวิธีการหลายวิธีสำหรับสิ่งนี้โดยให้ตัวอย่างที่ละเอียดยิ่งขึ้นโดยใช้แอพ repackaging และ Android Studio Debugger อีกครั้งผู้โจมตีสามารถเขียนรหัสที่เทียบเท่าใน Shipraider เพื่อใช้ API SHOPFAST ต่อไป
โพสต์บล็อกที่สี่แนะนำมาตรการรักษาความปลอดภัยขั้นสุดท้ายในซีรีส์ การยืนยันแอพมือถือเป็นแนวคิดด้านความปลอดภัยของ API ที่ใช้ใน Appreov โดยสรุปแล้ว Approv จะตรวจสอบแอพทั้งหมดและสภาพแวดล้อมที่ทำงานก่อนที่จะเปิดใช้งานการเข้าถึง API - แอพเป็นคีย์ มันให้ความมั่นใจในระดับสูงว่าการเข้าถึง API ของคุณถูกล็อคลงในอินสแตนซ์ที่ถูกกฎหมายของแอปของคุณ วิธีการนี้อธิบายรายละเอียดเพิ่มเติมในหน้าภาพรวมผลิตภัณฑ์ของเราและในกระดาษสีขาวที่เกี่ยวข้อง
การรวมกลุ่มนั้นง่ายอย่างที่สามารถทำได้สำหรับนักพัฒนาแอพมือถือ เพิ่ม Approoov SDK ลงในงานสร้างของคุณหวังว่าจะใช้หนึ่งใน [ตัวอย่างการรวม Quickstart]] (https://approov.io/docs/latest/approov-integration-examples/mobile-app/) เพื่อเร่งกระบวนการแล้วเรียกร้องให้ SDK คุณสามารถดูสิ่งนี้ได้ในแอพ shipfast ใน shipfastapp.kt ค้นหาบรรทัดที่นำหน้าด้วย // *** UNCOMMENT THE CODE BELOW FOR APPROOV ***
การรวมเซิร์ฟเวอร์ API นั้นง่ายเช่นกัน: ใช้หนึ่งในไลบรารี JWT จำนวนมากเพื่อตรวจสอบโทเค็น Approv ก่อนที่จะตอบสนองต่อคำขอ API API SHOPFAST ใช้แพ็คเกจโหนด Express-JWT เพื่อตรวจสอบโทเค็น Approv ด้วยการโทรกลับ checkApproovToken
เอกสารการใช้งานขั้นสูงอธิบายขั้นตอนการสร้างและการปรับใช้สำหรับแต่ละองค์ประกอบที่ประกอบขึ้นเป็นบริการจัดส่งและ Shipraider ในการติดตามซีรีส์บล็อกโดยปกติแล้วจะเพียงพอที่จะใช้บริการและแอพที่ปรับใช้และดูแลโดยทีม Appreov ซึ่งในกรณีนี้คุณไม่จำเป็นต้องติดตามเอกสารนั้น อย่างไรก็ตามคุณจะต้องใช้มันหากคุณลองใช้ความท้าทาย pentesting ที่เป็นตัวเลือกซึ่งอธิบายไว้ในตอนท้ายของโพสต์บล็อกล่าสุด
ชุดบล็อกโดยรวมแสดงให้เห็นถึงการปรับปรุงอย่างค่อยเป็นค่อยไปในการรักษาความปลอดภัย API โดยการรับรองว่าคำขอนั้นมาจากแหล่งที่ถูกต้องเท่านั้น บล็อกและรหัสในที่เก็บนี้ใช้เพื่อแสดงวิธีหลีกเลี่ยงกลไกการป้องกันบางอย่างที่ใช้กันทั่วไปในการพัฒนา API มันถึงจุดสูงสุดในการรวมเข้าด้วยกันซึ่งให้ความมั่นใจในระดับสูงสุดในการร้องขอที่ได้รับการตรวจสอบโดย API SHOPFAST หากคุณต้องการสำรวจโซลูชัน Approv ในเชิงลึกมากขึ้นทำไมไม่ลองลิงค์หนึ่งในลิงค์ต่อไปนี้เป็นจุดกระโดด: