Gokart เป็นเครื่องมือวิเคราะห์แบบคงที่สำหรับ GO ที่ค้นหาช่องโหว่โดยใช้รูปแบบ SSA (การมอบหมายแบบคงที่เดียว) ของซอร์สโค้ด GO มันมีความสามารถในการติดตามแหล่งที่มาของตัวแปรและอาร์กิวเมนต์ฟังก์ชั่นเพื่อตรวจสอบว่าแหล่งที่มาของอินพุตมีความปลอดภัยหรือไม่ซึ่งจะช่วยลดจำนวนบวกที่ผิดพลาดเมื่อเทียบกับเครื่องสแกนความปลอดภัย GO อื่น ๆ ตัวอย่างเช่นการสืบค้น SQL ที่ต่อกันด้วยตัวแปรอาจถูกตั้งค่าสถานะตามธรรมเนียมเป็นการฉีด SQL; อย่างไรก็ตาม Gokart สามารถทราบได้ว่าตัวแปรนั้นมีค่าคงที่หรือคงที่หรือไม่หรือไม่ซึ่งในกรณีนี้ไม่มีช่องโหว่
Gokart ยังช่วย Power Chariot แพลตฟอร์มความปลอดภัยของ Praetorian ที่ช่วยให้คุณค้นหาจัดการและแก้ไขช่องโหว่ในซอร์สโค้ดและสภาพแวดล้อมคลาวด์ของคุณ Chariot ทำให้การสแกน Gokart แบบอัตโนมัติอย่างต่อเนื่องเป็นไปอย่างต่อเนื่องในซอร์สโค้ดของคุณ หากคุณต้องการลอง Gokart คุณสามารถตั้งค่าบัญชีรถม้าฟรีในไม่กี่นาทีโดยคลิกที่นี่
การวิเคราะห์แบบคงที่เป็นเทคนิคที่มีประสิทธิภาพสำหรับการค้นหาช่องโหว่ในซอร์สโค้ด อย่างไรก็ตามวิธีการดังกล่าวได้รับความเดือดร้อนจากการมีเสียงดัง - นั่นคือเครื่องมือการวิเคราะห์แบบคงที่จำนวนมากพบว่า "ช่องโหว่" ค่อนข้างน้อยที่ไม่จริง สิ่งนี้นำไปสู่การเสียดสีของนักพัฒนาเนื่องจากผู้ใช้เบื่อเครื่องมือ "ร้องไห้หมาป่า" ครั้งเดียวมากเกินไป
แรงจูงใจสำหรับ Gokart คือการแก้ไขปัญหานี้: เราสามารถสร้างเครื่องสแกนที่มีอัตราบวกเท็จที่ต่ำกว่าเครื่องมือที่มีอยู่ได้หรือไม่? จากการทดลองของเราคำตอบคือใช่ ด้วยการใช้ประโยชน์จากการติดตามแหล่งกำเนิดกับ SSA และ SSA ทำให้ Gokart สามารถติดตามความน่าเบื่อของตัวแปรระหว่างการกำหนดตัวแปรได้อย่างมีนัยสำคัญการปรับปรุงความแม่นยำของการค้นพบอย่างมีนัยสำคัญ การมุ่งเน้นของเราคือการใช้งาน: ในทางปฏิบัตินั่นหมายความว่าเราได้ปรับแนวทางของเราให้เหมาะสมเพื่อลดการเตือนที่ผิดพลาด
สำหรับข้อมูลเพิ่มเติมโปรดอ่านโพสต์บล็อกของเรา
คุณสามารถติดตั้ง gokart ในพื้นที่โดยใช้หนึ่งในตัวเลือกใด ๆ ที่แสดงด้านล่าง
go install $ go install github.com/praetorian-inc/gokart@latestดาวน์โหลดไบนารีสำหรับระบบปฏิบัติการของคุณจากหน้าเผยแพร่
(ไม่บังคับ) ดาวน์โหลดไฟล์ checksums.txt เพื่อตรวจสอบความสมบูรณ์ของไฟล์เก็บถาวร
# Check the checksum of the downloaded archive
$ shasum -a 256 gokart_ ${VERSION} _ ${ARCH} .tar.gz
b05c4d7895be260aa16336f29249c50b84897dab90e1221c9e96af9233751f22 gokart_ ${VERSION} _ ${ARCH} .tar.gz
$ cat gokart_ ${VERSION} _ ${ARCH} _checksums.txt | grep gokart_ ${VERSION} _ ${ARCH} .tar.gz
b05c4d7895be260aa16336f29249c50b84897dab90e1221c9e96af9233751f22 gokart_ ${VERSION} _ ${ARCH} .tar.gz$ tar -xvf gokart_ ${VERSION} _ ${ARCH} .tar.gzgokart ไปยังเส้นทางของคุณ: $ mv ./gokart /usr/local/bin/ # clone the GoKart repo
$ git clone https://github.com/praetorian-inc/gokart.git
# navigate into the repo directory and build
$ cd gokart
$ go build
# Move the gokart binary into your path
$ mv ./gokart /usr/local/binสร้างภาพนักเทียบท่า
docker build -t gokart .เรียกใช้คอนเทนเนอร์ด้วยการสแกนท้องถิ่น (ไดเรกทอรีสแกนท้องถิ่นจะต้องติดตั้งกับภาพคอนเทนเนอร์)
docker run -v /path/to/scan-dir:/scan-dir gokart scan /scan-dirเรียกใช้คอนเทนเนอร์ด้วยการสแกนระยะไกล (เมื่อระบุคีย์ส่วนตัวสำหรับการรับรองความถูกต้องซึ่งจะต้องติดตั้งกับคอนเทนเนอร์)
docker run gokart scan -r https://github.com/praetorian-inc/gokart
# specifying a private key for private repository ssh authentication
docker run -v /path/to/key-dir/:/key-dir gokart scan -r [email protected]:praetorian-inc/gokart.git -k /key-dir/ssh_key # running without a directory specified defaults to '.'
gokart scan < flags >gokart scan < directory > < flags > gokart help คุณสามารถทำตามขั้นตอนด้านล่างเพื่อเรียกใช้ Gokart on Go Test Bench แอปพลิเคชัน GO ที่มีความเสี่ยงโดยเจตนาจากทีมรักษาความปลอดภัยคอนทราสต์
# Clone sample vulnerable application
git clone https://github.com/Contrast-Security-OSS/go-test-bench.git
gokart scan go-test-bench/เอาต์พุตควรแสดงช่องโหว่ที่ระบุบางอย่างแต่ละรายการมีฟังก์ชั่นที่มีช่องโหว่และแหล่งที่มาของการป้อนข้อมูลผู้ใช้ที่ระบุ
ในการทดสอบคุณสมบัติ Gokart เพิ่มเติมบางอย่างคุณสามารถสแกนด้วยธง CLI ที่แนะนำด้านล่าง
# Use verbose flag to show full traces of these vulnerabilities
gokart scan go-test-bench/ -v
# Use globalsTainted flag to ignore whitelisted Sources
# may increase false positive results
gokart scan go-test-bench/ -v -g
# Use debug flag to display internal analysis information
# which is useful for development and debugging
gokart scan go-test-bench/ -d
# Output results in sarif format
gokart scan go-test-bench/ -s
# Output results to file
gokart scan go-test-bench/ -o gokart-go-test-bench.txt
# Output scarif results to file
gokart scan go-test-bench/ -o gokart-go-test-bench.txt -s
# Scan remote public repository
# Repository will be cloned locally, scanned and deleted afterwards
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -v
# Specify the remote branch to scan
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -b actions_fix
# Scan remote private repository via ssh
gokart scan -r [email protected]:Contrast-Security-OSS/go-test-bench.git
# Scan remote private repository and optionally specify a key for ssh authentication
gokart scan -r [email protected]:Contrast-Security-OSS/go-test-bench.git -k /home/gokart/.ssh/github_rsa_key
# Use remote scan and output flags together for seamless security reviews
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -o gokart-shiftleft-go-demo.txt -v
# Use remote scan, output and sarif flags for frictionless integration into CI/CD
gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -o gokart-shiftleft-go-demo.txt -s ในการทดสอบการขยายความสามารถของ Gokart คุณสามารถแก้ไขไฟล์การกำหนดค่าที่ Gokart ใช้เพื่อแนะนำอ่างล้างจานที่มีช่องโหว่ใหม่ในการวิเคราะห์ มีเครื่องวิเคราะห์อ่างล้างจานทดสอบที่กำหนดไว้ในไฟล์กำหนดค่าเริ่มต้นที่รวมอยู่ที่ util/analyzers.yml แก้ไข util/analyzers.yml เพื่อลบความคิดเห็นบนเครื่องวิเคราะห์อ่างล้างจานทดสอบแล้วโดยตรง gokart เพื่อใช้ไฟล์กำหนดค่าที่แก้ไขด้วยธง -i
# Scan using modified analyzers.yml file and output full traces
gokart scan go-test-bench/ -v -i < path-to-gokart > /util/analyzers.ymlตอนนี้เอาต์พุตควรมีช่องโหว่เพิ่มเติมรวมถึงช่องโหว่ "ทดสอบอ่างล้างจานใหม่ที่สามารถเข้าถึงได้โดยผู้ใช้" ช่องโหว่
คุณสามารถเรียกใช้การทดสอบที่รวมอยู่ด้วยคำสั่งต่อไปนี้เรียกใช้จากไดเรกทอรีรูท Gokart
go test -v ./...