ใช้ Github อย่างไร ไม่ให้ข้อมูลสำคัญเปิดเผยสู่สาธารณะ [Unit 42]

Sittikorn S.
3 min readFeb 14, 2020

--

หลังเตรียมน้ำให้ภรรยาอาบน้ำลูก ก็แวะมาอ่านบทความจากทีม Unit 42 ซึ่งเป็นทีมนักวิจัยความปลอดภัยทางไซเบอร์ของบริษัท PaloAlto Networks ได้ทำรายงาน Unit 42 Cloud Threat Report: Spring 2020 ซึ่งมุ่งเน้นเกี่ยวกับแนวทางปฏิบัติของกระบวนการ DevOps เพื่อหลีกเลี่ยงการตั้งค่าที่ผิดพลาดที่อาจเกิดขึ้นบน Cloud

Unit 42 CTR: Sensitive Data Exposed in GitHub

‘with greater speed, comes higher risk’

อะไรที่เร็วมากเกินไป ก็ตามมาด้วยความเสี่ยงที่สูงขึ้นตามด้วย

##########################################

นักวิจัยด้านความปลอดภัยพบว่ามีองค์กรจำนวนใช้งาน GitHub ด้วย public account แต่เอาข้อมูลสำคัญของ DevOps ไปเก็บไว้บนนั้น ทำให้มีความเสี่ยงต่อข้อมูลที่จะรั่วไหลต่อสาธารณะ

จาก 24,000 Public Github data พบว่ามีข้อมูลสำคัญดังนี้

โดยแบ่งรายละเอียดเป็นดังนี้

  1. Configuration and Private key files

ซึ่งประเภทไฟล์การกำหนดค่าที่พบมากที่สุดคือ Django โดย Django เป็น python based ซึ่งเป็นเฟรมเวิร์กผ่านเว็บที่รองรับการพัฒนาและออกแบบอย่างรวดเร็ว แล้วอีกไฟล์ซึ่งเป็นที่นิยมไม่แพ้กัน คือ PHP ซึ่งเป็นภาษาสคริปต์ที่ใช้กันทั่วไปในการออกแบบเว็บ ไฟล์การกำหนดค่าบนเว็บเหล่านี้ ถ้าผู้ไม่หวังดีได้ข้อมูลไป ก็จะสามารถรู้ถึงโครงสร้างพื้นฐานของระบบคลาวด์ขององค์กรนั้นๆ และหาช่องโหว่ของ software ระบบที่ใช้ได้ง่ายมากขึ้นเลย หรืออาจทำให้ผู้โจมตีสามารถเข้าถึงเซิร์ฟเวอร์เหล่านั้นได้อย่างง่ายดาย ไม่ต้องเหนื่อยเลย

10 อันดับ ไฟล์การกำหนดค่าบน GitHub
ตัวอย่าง ข้อมูล php configuration file

2. Hardcoded API Keys and OAuth Tokens

พบว่า API Key จำนวน 2464 key และ OAuth Token จำนวน 1998 key ภายใน GitHub file ที่กว่า 24,000 ชุด

API key แยกตามแต่ละ environment
ตัวอย่าง Google Cloud Key บน GitHub

พวก Key & Password ของระบบ Cloud นั้นมีความสำคัญมาก เพราะอาจนำไปสู่การขโมยข้อมูลของลูกค้าได้เลย อย่างเคสที่เพิ่งเกิดขึ้นมาไม่นาน อย่าง Capital One ซึ่งมาจากเพียงได้ Amazon AWS key ไปเท่านั้นเอง สามารถไปอ่านข้อมูลเชิงลึกได้จากทางบทความของ i-Secure ในหัวข้อเรื่อง Capital One Data Breach: Analysis & Recommendation ได้เลยครับ

3. Hardcoded Passwords

รวมรายการ username และ password จำนวน 2328 รายการ ประกอบด้วยรหัสผ่านที่ไม่ซ้ำกัน 880 รายการ รวมถึง 797 ชื่อผู้ใช้ที่ไม่ซ้ำกัน พบรหัสผ่านเหล่านี้ภายในรายการ URL บริการ API และไฟล์กำหนดค่าของ SSH โดยนักวิจัยตั้งข้อสังเกตว่ามีเพียง 18% ของรายการรหัสผ่านทั้งหมดที่เกี่ยวข้องกับรหัสผ่านที่พบบ่อย โดยอันดับ 1 ก็นี้ไม่พ้น รหัสผ่านว่า “password” นั่นเอง ยอดฮิตตลอดกาล รองมาด้วย secret, admin ตามลำดับ

ตัวอย่าง Key บน Code ของ GitHub
ตัวอย่าง password ที่ hardcorded บน GitHub

คำแนะนำ:
นักวิจัยแนะนำให้ผู้ใช้ทั่วไปและผู้ใช้องค์กรที่เผยแพร่ Source Code ไปยัง GitHub ควรทำให้มั่นใจว่าข้อมูลสำคัญต่างๆ ไม่ถูกเปิดเผยไปยังสาธารณะ

- ใช้แนวทางการเขียนโค้ดแบบอิงตัวแปร และ CLI argument-based แทน แล้วทำการลบชื่อผู้ใช้และรหัสผ่านแบบฮาร์ดโค้ด, API คีย์และโทเค็น OAuth ออกจากตัวอย่างโค้ด
- ใช้นโยบายความปลอดภัย (Password Security Policy) ของรหัสผ่านเพื่อบังคับใช้รหัสผ่านที่ซับซ้อนขึ้น
- ใช้นโยบายการเผยแพร่ ( Publication Policy) เพื่อควบคุมและป้องกันการแบ่งปันข้อมูลที่สำคัญภายในผ่านแหล่งข้อมูลภายนอก
- ใช้ความสามารถของบัญชีองค์กร (Enterprise account) ของ GitHub เพื่อให้แน่ใจว่ามีการตรวจสอบการแบ่งปันสาธารณะอย่างละเอียดมากขึ้น
- ใช้เครื่องมือในการช่วยตรวจ เช่น AWS-git, TokenScanner ของ GitHub, gitrob หรือ trugglehog เพื่อระบุตรวจสอบและลบโทเค็น ออกจากการเผยแพร่สู่สาธารณะ
- ใช้งาน Private Repository แทนสำหรับการใช้งานของทีม DevOps แล้วจำกัดการเข้าถึงอย่างเหมาะสม รวมถึงนำกระบวนการ DevSecOps เข้ามาใช้งานอย่างจริงจัง
- องค์กรอาจใช้บริการ Threat Intelligence ที่จะคอยช่วย monitor keyword ต่างๆ ขององค์กรเรา ที่อยู่ใน Public Site, Pastebin, Github, Dark Web หรืออื่นๆ เป็นการช่วยดูอีกทาง ว่ามีใครแอบเอาข้อมูลไปอัพโหลดภายนอกไหม
ข้อมูลเพิ่มเติม:
8 Top Threat Intelligence Platforms , Cyber Threat Intelligence Feeds

สามารถดาว์นโหลดรายงานตัวเต็มได้ที่ http://go.paloaltonetworks.com/cloudthreatreport

ที่มา: https://unit42.paloaltonetworks.com/github-data-exposed/

--

--

Sittikorn S.

When faced with a real-life cybersecurity threat, few organizations know what steps to take first in order to handle the incident & minimize impact on business.