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, 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
|
```rust
|
||||||
pub enum Option<T> {
|
pub enum Option<T> {
|
||||||
None,
|
None,
|
||||||
@ -74,7 +74,7 @@ for (key, hashvalue) in &*map {
|
|||||||
for key in map.keys() {
|
for key in map.keys() {
|
||||||
for value in map.values() {
|
for value in map.values() {
|
||||||
```
|
```
|
||||||
### Recursive Box
|
### Rekürsif Kutu
|
||||||
```rust
|
```rust
|
||||||
enum List {
|
enum List {
|
||||||
Cons(i32, List),
|
Cons(i32, List),
|
||||||
@ -269,7 +269,7 @@ println!("{:?}", apple);
|
|||||||
```
|
```
|
||||||
#### Threads
|
#### 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
|
```rust
|
||||||
fn main() {
|
fn main() {
|
||||||
let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 }));
|
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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user