Rust를 이용한 비트스쿼팅 공격 및 악용
저는 개인적으로 비트스쿼팅 공격이 정말 놀랍다고 생각합니다!
아이디어는 컴퓨터가 하나 이상의 비트가 손상되어 예상 값과 다른 메모리 오류가 발생한다는 것입니다. 전자기 간섭 또는 cosmic rays (!)에서 올 수 있습니다.
This post is an excerpt from my course Black Hat Rust
0
가 될 것으로 예상되는 비트가 1
로 뒤집힐 수 있으며 그 반대도 마찬가지입니다.이 예에서 공격자가
acc.com
를 제어하는 경우 인적 오류 없이 원래 예정된 abc.com
를 수신할 수 있습니다!다음은 주어진 도메인의 모든 "비트 이동"및 유효한 대안을 생성하는 작은 프로그램입니다.
ch_09/dnsquat/src/main.rs
use std::env;
fn bitflip(charac: u8, pos: u8) -> u8 {
let shiftval = 1 << pos;
charac ^ shiftval
}
fn is_valid(charac: char) -> bool {
charac.is_ascii_alphanumeric() || charac == '-'
}
fn main() {
let args = env::args().collect::<Vec<String>>();
if args.len() != 3 {
println!("Usage: dnsquat domain .com");
return;
}
let name = args[1].to_lowercase();
let tld = args[2].to_lowercase();
for i in 0..name.len() {
let charac = name.as_bytes()[i];
for bit in 0..8 {
let bitflipped = bitflip(charac.into(), bit);
if is_valid(bitflipped as char)
&& bitflipped.to_ascii_lowercase() != charac.to_ascii_lowercase()
{
let mut bitsquatting_candidat = name.as_bytes()[..i].to_vec();
bitsquatting_candidat.push(bitflipped);
bitsquatting_candidat.append(&mut name.as_bytes()[i + 1..].to_vec());
println!(
"{}{}",
String::from_utf8(bitsquatting_candidat).unwrap(),
tld
);
}
}
}
}
$ cargo run -- domain .com
eomain.com
fomain.com
lomain.com
tomain.com
dnmain.com
dmmain.com
dkmain.com
dgmain.com
dolain.com
dooain.com
doiain.com
doeain.com
do-ain.com
domcin.com
domein.com
domiin.com
domqin.com
domahn.com
domakn.com
domamn.com
domaan.com
domayn.com
domaio.com
domail.com
domaij.com
domaif.com
Reference
이 문제에 관하여(Rust를 이용한 비트스쿼팅 공격 및 악용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sylvainkerkour/bitsquatting-attacks-and-exploitation-with-rust-26l6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)