mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/todo/rust-basics.md'] to tr
This commit is contained in:
parent
07f9c2c9c8
commit
d45924ba97
@ -21,7 +21,7 @@ Wrapper::new("Foo").value, "Foo"
|
||||
```
|
||||
### Option, Some & None
|
||||
|
||||
Option türü, değerin Some (bir şey var) veya None (hiçbir şey yok) türünde olabileceği anlamına gelir:
|
||||
Option türü, değerin Some (bir şey var) veya None olabileceği anlamına gelir:
|
||||
```rust
|
||||
pub enum Option<T> {
|
||||
None,
|
||||
@ -74,7 +74,7 @@ for (key, hashvalue) in &*map {
|
||||
for key in map.keys() {
|
||||
for value in map.values() {
|
||||
```
|
||||
### Recursive Box
|
||||
### Rekürsif Kutu
|
||||
```rust
|
||||
enum List {
|
||||
Cons(i32, List),
|
||||
@ -269,7 +269,7 @@ println!("{:?}", apple);
|
||||
```
|
||||
#### Threads
|
||||
|
||||
Bu durumda, iş parçacığına değiştirebileceği bir değişken geçireceğiz.
|
||||
Bu durumda, iş parçacığına değiştirebileceği bir değişken geçeceğiz.
|
||||
```rust
|
||||
fn main() {
|
||||
let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 }));
|
||||
@ -287,4 +287,71 @@ thread::sleep(Duration::from_millis(500));
|
||||
}
|
||||
}
|
||||
```
|
||||
### Güvenlik Temelleri
|
||||
|
||||
Rust, varsayılan olarak güçlü bellek güvenliği garantileri sağlar, ancak yine de `unsafe` kod, bağımlılık sorunları veya mantık hataları yoluyla kritik güvenlik açıkları oluşturabilirsiniz. Aşağıdaki mini-kılavuz, Rust yazılımlarının saldırgan veya savunmacı güvenlik incelemeleri sırasında en sık karşılaşacağınız temel unsurları toplar.
|
||||
|
||||
#### Unsafe kod & bellek güvenliği
|
||||
|
||||
`unsafe` blokları derleyicinin takma adlandırma ve sınır kontrollerinden feragat eder, bu nedenle **tüm geleneksel bellek bozulma hataları (OOB, kullanımdan sonra serbest bırakma, çift serbest bırakma vb.) tekrar ortaya çıkabilir**. Hızlı bir denetim kontrol listesi:
|
||||
|
||||
* `unsafe` bloklarını, `extern "C"` fonksiyonlarını, `ptr::copy*` çağrılarını, `std::mem::transmute`, `MaybeUninit`, ham işaretçileri veya `ffi` modüllerini arayın.
|
||||
* Düşük seviyeli fonksiyonlara geçirilen her işaretçi aritmetiği ve uzunluk argümanını doğrulayın.
|
||||
* Birisi `unsafe` kodunu yeniden tanıttığında derlemeyi başarısız kılmak için `#![forbid(unsafe_code)]` (crate genelinde) veya `#[deny(unsafe_op_in_unsafe_fn)]` (1.68 +) tercih edin.
|
||||
|
||||
Ham işaretçilerle oluşturulmuş bir taşma örneği:
|
||||
```rust
|
||||
use std::ptr;
|
||||
|
||||
fn vuln_copy(src: &[u8]) -> Vec<u8> {
|
||||
let mut dst = Vec::with_capacity(4);
|
||||
unsafe {
|
||||
// ❌ copies *src.len()* bytes, the destination only reserves 4.
|
||||
ptr::copy_nonoverlapping(src.as_ptr(), dst.as_mut_ptr(), src.len());
|
||||
dst.set_len(src.len());
|
||||
}
|
||||
dst
|
||||
}
|
||||
```
|
||||
Miri'yi çalıştırmak, test zamanında UB'yi tespit etmenin ucuz bir yoludur:
|
||||
```bash
|
||||
rustup component add miri
|
||||
cargo miri test # hunts for OOB / UAF during unit tests
|
||||
```
|
||||
#### RustSec / cargo-audit ile bağımlılıkların denetimi
|
||||
|
||||
Gerçek dünyadaki çoğu Rust zayıflığı üçüncü taraf crate'lerde bulunur. RustSec danışmanlık DB'si (topluluk destekli) yerel olarak sorgulanabilir:
|
||||
```bash
|
||||
cargo install cargo-audit
|
||||
cargo audit # flags vulnerable versions listed in Cargo.lock
|
||||
```
|
||||
CI'ye entegre edin ve `--deny warnings` ile başarısız olsun.
|
||||
|
||||
`cargo deny check advisories`, benzer işlevsellik sunar ve lisans ile yasaklı liste kontrolleri yapar.
|
||||
|
||||
#### Cargo-vet ile tedarik zinciri doğrulaması (2024)
|
||||
|
||||
`cargo vet`, her bir içe aktardığınız crate için bir inceleme hash'i kaydeder ve fark edilmeden yapılan güncellemeleri engeller:
|
||||
```bash
|
||||
cargo install cargo-vet
|
||||
cargo vet init # generates vet.toml
|
||||
cargo vet --locked # verifies packages referenced in Cargo.lock
|
||||
```
|
||||
Araç, zehirli paket saldırılarını azaltmak için Rust proje altyapısı ve artan sayıda organizasyon tarafından benimsenmektedir.
|
||||
|
||||
#### API yüzeyinizi Fuzzing (cargo-fuzz)
|
||||
|
||||
Fuzz testleri, DoS veya yan kanal sorunlarına dönüşebilecek panik, tam sayı taşmaları ve mantık hatalarını kolayca yakalar:
|
||||
```bash
|
||||
cargo install cargo-fuzz
|
||||
cargo fuzz init # creates fuzz_targets/
|
||||
cargo fuzz run fuzz_target_1 # builds with libFuzzer & runs continuously
|
||||
```
|
||||
Fuzz hedefini reposuna ekle ve bunu pipeline'ında çalıştır.
|
||||
|
||||
## Referanslar
|
||||
|
||||
- RustSec Danışma Veritabanı – <https://rustsec.org>
|
||||
- Cargo-vet: "Rust Bağımlılıklarını Denetleme" – <https://mozilla.github.io/cargo-vet/>
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user