Rust를 이용한 비트스쿼팅 공격 및 악용

원래 내 웹사이트에 게시됨: https://kerkour.com/bitsquatting-attack-generator-in-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

좋은 웹페이지 즐겨찾기