Rilis Contoh Proyek Tantangan ini bertujuan untuk memberikan Proyek Tantangan kepada pesaing yang menyerupai struktur dan antarmuka yang sama yang akan ada untuk semua Proyek Tantangan selama kompetisi.
Contoh ini telah dikembangkan dan diuji dengan versi berikut:
Catatan: Konten di sini dapat berubah, harap tarik dan nantikan pembaruan di masa mendatang!
src/
- ini adalah kode sumber untuk proyek tantangan, kernel linux 6.1.54 dengan modifikasi berikut:
net/tipc/crypto.c
net/tipc/crypto.c
, net/tipc/tipc_test.c
test_harnesses/
. run.sh
- skrip yang menyediakan CRS dengan antarmuka standar untuk berinteraksi dengan proyek tantangan.
build.sh
- skrip yang mendefinisikan proses pembangunan untuk proyek tantangan.
project.yaml
- dokumen yaml yang merinci banyak aspek penting dari proyek tantangan.
exemplar_only/
- folder ini berisi informasi tambahan yang hanya disediakan dengan rilis exemplar, informasi ini tidak diharapkan diberikan selama kompetisi.
blobs/
- folder ini berisi file bernama sample_solve.bin
yang bila diteruskan ke test harness akan memicu kerentanan yang disuntikkan.patches/
- ini adalah folder yang berisi dua contoh patch.good_patch.diff
- menghilangkan kerentanan dan mempertahankan fungsionalitas.bad_patch.diff
- menghilangkan kerentanan tetapi tidak mempertahankan fungsionalitas.gen_blob.py
- ini adalah skrip pembantu bagi pengguna untuk menghasilkan gumpalan biner untuk test harness yang disediakan.run_internal.sh
- ini adalah skrip yang berjalan di lingkungan buruh pelabuhan untuk menangani permintaan.setup.sh
- ini adalah skrip pemasangan ketergantungan untuk membangun image buruh pelabuhan.test_blob.py
- ini adalah skrip untuk menguji blob data yang diterima terhadap harness target. Untuk menguji contoh tersebut, pertama-tama buatlah image buruh pelabuhan dasar dengan menjalankan perintah berikut.
docker build . -t exemplar-cp-linux:base --target=exemplar-cp-linux-base
Setelah dibuat, interaksi dasar dengan container dapat dicapai melalui skrip run.sh
Skrip run.sh
menyediakan antarmuka standar yang akan konsisten di semua CP kompetisi. Sebelum membuat perangkat lunak, Anda harus mengambil sumber dari repositori sumbernya:
./run.sh pull_source
Perintah ini menimpa apa pun yang saat ini ada di folder src/
, sehingga salinan baru kode sumber dapat dimuat.
./run.sh build [patch file]
Perintah build
membangun proyek tantangan dengan file patch opsional yang dihasilkan. Kode sumber dibuat melalui volume buruh pelabuhan yang dipasang ke folder src/
. Biner test harness dibuat dan disimpan di folder out/
. Dan dapat digunakan untuk analisis.
CATATAN: perintah build
akan membangun status kerja src/
saat ini, serta modifikasi apa pun pada Dockerfile. Jika Anda ingin menguji patch, disarankan agar Anda membuat salinan bersih status tersebut dengan perintah pull_source
dan Dockerfile yang bersih.
./run.sh run_pov < blob_file > < harness_id >
Perintah run_pov
menjalankan file blob data biner yang disediakan terhadap id harness yang ditentukan. ID harness yang valid tercantum dalam file project.yaml
.
./run.sh run_tests
Perintah run_tests
menjalankan pengujian fungsionalitas dalam proyek tantangan. Untuk saat ini, perintah run_tests
akan mempertahankan keadaan asli direktori src/
.
Katakanlah Anda ingin mengambil kode sumber, membangunnya apa adanya, dan menganalisis biner uji linux dan memanfaatkan biner yang dihasilkan.
./run.sh pull_source
./run.sh build
file out/linux_test_harness
file src/arch/x86/boot/bzImage
Anda kemudian menjalankan blob data terhadap test harness untuk memeriksa pemicu pembersih. Untuk menguji data masukan Anda sendiri, ganti biner exemplar_only dengan file Anda sendiri.
./run.sh run_pov exemplar_only/blobs/sample_solve.bin linux_test_harness | grep -i ' pov|trigger '
Setelah memverifikasi pemicu pembersih, Anda memodifikasi kode sumber secara langsung melalui direktori src/
, mencoba menambal vuln.
sed -i ' 2310,2312d ' src/net/tipc/crypto.c
./run.sh build
./run.sh run_pov exemplar_only/blobs/sample_solve.bin linux_test_harness | grep -i ' pov|trigger '
./run.sh run_tests
Anda mendapati bahwa Anda telah menghapus pemicu pembersih, tetapi Anda gagal dalam uji fungsionalitas. Anda membuat solusi yang lebih baik dan menghasilkan file patch. Anda menarik salinan bersih dari sumber untuk menguji patch dengan benar terhadap sumber aslinya, dan menjalankan kembali pov dan pengujian fungsional. Untuk menguji patch Anda sendiri, ganti patch exemplar_only dengan file Anda sendiri.
./run.sh pull_source
./run.sh build exemplar_only/patches/good_patch.diff
./run.sh run_pov exemplar_only/blobs/sample_solve.bin linux_test_harness | grep -i ' pov|trigger '
./run.sh run_tests
Anda sekarang telah membuat blob data yang memicu pembersih ketika diteruskan ke harness linux_test_harness
, serta patch yang memulihkan kerentanan tersebut saat melewati pengujian fungsionalitas.