GCPBucketBrute
สคริปต์สำหรับระบุที่เก็บข้อมูล Google Storage กำหนดว่าคุณมีสิทธิ์เข้าถึงที่เก็บข้อมูลใดบ้าง และพิจารณาว่าสามารถยกระดับสิทธิ์ได้หรือไม่
- สคริปต์นี้ (ไม่บังคับ) ยอมรับข้อมูลรับรองผู้ใช้/บัญชีบริการ GCP และคีย์เวิร์ด
- จากนั้น รายการการเรียงสับเปลี่ยนจะถูกสร้างขึ้นจากคำหลักนั้น ซึ่งจะใช้ในการสแกนหาการมีอยู่ของที่เก็บข้อมูล Google Storage ที่มีชื่อเหล่านั้น
- หากมีการระบุข้อมูลรับรอง การแจงนับส่วนใหญ่จะยังคงดำเนินการในขณะที่ไม่มีการตรวจสอบสิทธิ์ แต่สำหรับบัคเก็ตใดๆ ที่ถูกค้นพบผ่านการแจงนับที่ไม่ผ่านการตรวจสอบสิทธิ์ จะพยายามระบุสิทธิ์ของบัคเก็ตโดยใช้ TestIamPermissions API พร้อมด้วยข้อมูลประจำตัวที่ให้มา ซึ่งจะช่วยค้นหาบัคเก็ตที่สามารถเข้าถึงได้ในขณะที่ได้รับการรับรองความถูกต้อง แต่ไม่ใช่ในขณะที่ไม่ได้รับการรับรองความถูกต้อง
- ไม่ว่าจะระบุข้อมูลรับรองหรือไม่ก็ตาม สคริปต์จะพยายามระบุสิทธิ์ของบัคเก็ตโดยใช้ TestIamPermissions API ในขณะที่ไม่ได้รับการตรวจสอบสิทธิ์ ซึ่งหมายความว่า หากคุณไม่ป้อนข้อมูลประจำตัว คุณจะเห็นเฉพาะสิทธิ์ที่ผู้ใช้ที่ไม่ผ่านการรับรองความถูกต้องมีเท่านั้น แต่หากคุณป้อนข้อมูลรับรอง คุณจะเห็นได้ว่าผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์มีสิทธิ์เข้าถึงใดบ้างเมื่อเปรียบเทียบกับผู้ใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
- คำเตือน: หากมีการให้ข้อมูลประจำตัว ชื่อผู้ใช้ของคุณสามารถเปิดเผยได้ในบันทึกการเข้าถึงของที่เก็บข้อมูลใดๆ ที่คุณค้นพบ
TL; DR สรุป
- เมื่อระบุคำหลัก สคริปต์นี้จะระบุที่เก็บข้อมูลของ Google Storage ตามการเรียงสับเปลี่ยนจำนวนหนึ่งที่สร้างจากคำหลัก
- จากนั้นบัคเก็ตที่ค้นพบจะถูกส่งออก
- จากนั้น สิทธิ์ใดๆ ที่คุณได้รับ (ถ้ามี) ให้กับบัคเก็ตที่ค้นพบจะถูกส่งออก
- จากนั้นสคริปต์จะตรวจสอบสิทธิ์เหล่านั้นเพื่อยกระดับสิทธิ์ (storage.buckets.setIamPolicy) และจะแสดงผลลัพธ์สิ่งที่น่าสนใจ (เช่น รายการต่อสาธารณะ เขียนได้ต่อสาธารณะ รายการตรวจสอบสิทธิ์ได้ การยกระดับสิทธิ์ ฯลฯ)
ความต้องการ
- ลินุกซ์/โอเอสเอ็กซ์
- Windows ใช้งานได้เฉพาะกับการสแกนที่ไม่ผ่านการรับรองความถูกต้องเท่านั้น มีบางอย่างผิดปกติกับวิธีที่สคริปต์ใช้โมดูลกระบวนการย่อยซึ่งล้มเหลวเมื่อใช้ไคลเอนต์ Google ที่ผ่านการรับรองความถูกต้อง
- หลาม3
- พิพ3
การติดตั้ง
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
หรือ python3 -m pip install -r requirements.txt
การใช้งาน
ขั้นแรก ให้กำหนดประเภทของการรับรองความถูกต้องที่คุณต้องการใช้สำหรับการแจงนับระหว่างบัญชีผู้ใช้ บัญชีบริการ หรือที่ไม่ได้รับการรับรองความถูกต้อง หากคุณใช้บัญชีบริการ ให้ระบุเส้นทางของไฟล์ไปยังคีย์ส่วนตัวผ่านอาร์กิวเมนต์ -f
/ --service-account-credential-file-path
หากคุณใช้บัญชีผู้ใช้ ไม่ต้องระบุอาร์กิวเมนต์การตรวจสอบสิทธิ์ จากนั้นคุณจะได้รับแจ้งให้ป้อนโทเค็นการเข้าถึงของบัญชีผู้ใช้ของคุณเพื่อเข้าถึง GCP API หากคุณต้องการสแกนโดยไม่ผ่านการตรวจสอบสิทธิ์โดยสมบูรณ์ ให้ส่งอาร์กิวเมนต์ -u
/ --unauthenticated
เพื่อซ่อนข้อความแจ้งการตรวจสอบสิทธิ์
- สแกนหาที่เก็บข้อมูลโดยใช้คำหลัก "ทดสอบ" ในขณะที่ไม่ผ่านการรับรองความถูกต้องโดยสมบูรณ์:
python3 gcpbucketbrute.py -k test -u
- สแกนหาบัคเก็ตโดยใช้คีย์เวิร์ด "test" ขณะตรวจสอบสิทธิ์กับบัญชีบริการ (คีย์ส่วนตัวเก็บไว้ที่ ../sa-priv-key.pem) แสดงผลผลลัพธ์เป็น out.txt ในไดเร็กทอรีปัจจุบัน:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- สแกนหาที่เก็บข้อมูลโดยใช้คำหลัก "ทดสอบ" โดยใช้โทเค็นการเข้าถึงบัญชีผู้ใช้ซึ่งรันด้วย 10 กระบวนการย่อยแทนที่จะเป็น 5:
python3 gcpbucketbrute.py -k test -s 10
อาร์กิวเมนต์ที่มีอยู่
-
-k
/ --keyword
- อาร์กิวเมนต์นี้ใช้เพื่อระบุว่าจะใช้คำหลักใดในการสร้างการเรียงสับเปลี่ยน การเรียงสับเปลี่ยนเหล่านั้นคือสิ่งที่จะถูกค้นหาใน Google Storage
-
--check
- อาร์กิวเมนต์นี้ไม่เกิดร่วมกันกับ
-k
/ --keyword
และยอมรับสตริงเดียว ช่วยให้คุณตรวจสอบสิทธิ์ของคุณบนบัคเก็ตเฉพาะ แทนที่จะสร้างรายการการเรียงสับเปลี่ยนตามคีย์เวิร์ด อาจทำซ้ำเพื่อตรวจสอบที่เก็บข้อมูลหลายรายการ เครดิต: @BBerastegui
-
--check-list
- อาร์กิวเมนต์นี้ไม่เกิดร่วมกันกับ
-k
/ --keyword
และ --check
ช่วยให้คุณตรวจสอบสิทธิ์ของรายการบัคเก็ตในไฟล์ได้ ควรแสดงรายการไว้หนึ่งรายการต่อบรรทัดในไฟล์ข้อความ หากต้องการอ่านจากอินพุตมาตรฐาน ให้ส่ง -
เป็นชื่อไฟล์
-
-s
/ --subprocesses
- อาร์กิวเมนต์นี้ระบุจำนวนกระบวนการย่อยที่จะใช้สำหรับการแจงนับที่เก็บข้อมูล ค่าเริ่มต้นคือ 5 และยิ่งคุณตั้งค่านี้ไว้สูง การแจงนับก็จะเร็วขึ้น แต่คำขอต่อวินาทีของคุณไปยัง Google จะเพิ่มขึ้น สิ่งเหล่านี้คือเธรดหลัก แต่สคริปต์ใช้กระบวนการย่อยแทนเธรดสำหรับการดำเนินการแบบขนาน
-
-f
/ --service-account-credential-file-path
- อาร์กิวเมนต์นี้เป็นที่ที่คุณระบุเส้นทางไปยังไฟล์คีย์ส่วนตัวของบัญชีบริการ GCP ที่คุณต้องการใช้ตรวจสอบสิทธิ์ Google Storage ด้วย นี่เป็นทางเลือก หากคุณต้องการใช้โทเค็นการเข้าถึงแทน ให้ละเว้นอาร์กิวเมนต์นี้ แล้วคุณจะได้รับพร้อมท์ให้ใส่โทเค็น เพื่อไม่ให้บันทึกลงในประวัติบรรทัดคำสั่งของคุณ ข้อมูลเพิ่มเติมที่นี่: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files และที่นี่: https://google-auth.readthedocs.io/ en/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- อาร์กิวเมนต์นี้บังคับให้มีการแจงนับที่ไม่ผ่านการรับรองความถูกต้อง ด้วยแฟล็กนี้ คุณจะไม่ได้รับพร้อมท์ให้ใส่ข้อมูลประจำตัว และที่เก็บข้อมูลที่ถูกต้องจะไม่ได้รับการตรวจสอบสิทธิ์ที่ได้รับการตรวจสอบสิทธิ์
-
-o
/ --out-file
- อาร์กิวเมนต์นี้อนุญาตให้คุณระบุพาธของไฟล์ (แบบสัมพัทธ์หรือแบบสัมบูรณ์) ไปยังไฟล์บันทึกเพื่อส่งออกผลลัพธ์ ไฟล์จะถูกสร้างขึ้นหากไม่มีอยู่ และจะถูกต่อท้ายหากมีอยู่แล้ว
-
-w
/ --wordlist
- อาร์กิวเมนต์นี้ช่วยให้คุณสามารถระบุไฟล์อินพุตรายการคำศัพท์