拒绝服务(DOS)攻击是一种压倒受攻击计算机或网络资源的行为,使受害者无法服务于其他客户的请求。 因此,客户无法从受攻击计算机或网络获得服务。 DOS攻击通常通过发送大量的流量来针对受攻击计算机的内存和/或计算资源。
一、攻击类型
Exata中的DOS攻击模型支持三种攻击:
1.基本攻击:攻击者向受害者主机或网络发送大量UDP流量。此流量会消耗网络缓冲区内存和CPU资源。
2.TCPSYN:攻击者向受害者计算机发送TCPSYN数据包。每个TCPSYN数据包都会在受害者计算机上打开一个新的TCP连接,从而消耗了传输层缓冲区存储器。
3.IP碎片:攻击者将部分碎片化的IP数据包发送到受害者计算机。受害者计算机缓冲这些碎片化的数据包,并等待剩余的数据段,从而消耗网络层缓冲区内存。
二、参数配置
可以通过指定分组间隔(连续攻击分组之间的时间)或分组速率来配置DOS攻击。 如果指定了分组速率,那么,还可以选择指定一个上升时间。 如果指定了上升时间,则攻击以0分组/秒的速率开始,并在指定的上升时间内达到配置的速率。
使用分组间隔配置DOS攻击,在.app文件中设置以下语句:
DOS <victim> <num-of-attacker> <attacker-1> .... <attacker-N> <attack-type> <victim port> <item-count> <item-size> <packet-interval> <start-time> <end-time> [RAMP-UP-TIME <ramp-up-time>]
使用分组速率配置DOS攻击,在.app文件中设置以下语句:
DOS <victim> <num-of-attacker> <attacker-1> .... <attacker-N> <attack-type> <victim port> <item-count> <item-size> RATE <packet-rate> <start-time> <end-time> [RAMP-UP-TIME <ramp-up-time>]
字段含义:
<victim>:受攻击节点ID号;
<num-of-attacker>:攻击节点数量;
<attacker-1> .... <attacker-N>:一个或多个攻击节点ID号;
<attack-type>:攻击类型;
<victim port>:攻击端口;
<item-count>:要发送的分组数。 如果设置为0,则分组连续发送直到<end-time>或仿真结束时间,以先到者为准。 注意:如果<item-count>和<end-time>都大于0,则发送分组直到所要发送的分组数完成,或到达<end-time>和仿真结束时间,以先到者为准。
<item-size>:每个分组的大小。注意:如果将<attack-type>设置为SYN,则将忽略此参数。
<packet-interval>:连续发送攻击分组之间的分组时间间隔。注意:必须指定分组间隔或分组速率。
RATE <packet-rate>:发送攻击分组的最大速率。 注意:必须指定分组间隔或分组速率。
<start-time>:攻击发起时间;
<end-time>:攻击结束时间;如果此值设置为0,则在发送<item-count>个分组后结束,或仿真结束时间结束,以先到者为准。注意:<end-time>要么等于0,要么必须大于<start-time>。
[RAMP-UP-TIME <ramp-up-time>]:攻击速率升到最高所需要的时间(秒数),最高攻击速率为设置的分组间隔的倒数1/<packet-interval>或者设置的分组速率<packet-rate>。攻击速率从0开始,逐秒均匀升高,直到最高速率。如果参数设置为0或者不设置,则以最高速度发起攻击。
差别在于<packet-interval>和RATE <packet-rate>。
三、攻击示例
1.一个攻击者(节点15)使用SYN DOS攻击模式来攻击受害者节点(节点10)。攻击分组每10毫秒发送一次。
DOS 10 1 15 SYN 80 10000 512 10MS 10S 20S
2.五个攻击者(节点11到15)使用BASIC DOS攻击模式攻击受害者节点(节点10)。 攻击分组每10毫秒传送一次。
DOS 10 5 11 12 13 14 15 BASIC 1234 0 512 10MS 10S 20S
3.两个攻击者(节点11和12)使用BASIC DOS攻击模式攻击受害者节点(节点10)。 一旦攻击开始,攻击包将以100分组/秒的速率传输
DOS 10 2 11 12 BASIC 1234 0 512 RATE 100 10S 200S
4.两个攻击者(节点11和12)使用BASIC DOS攻击模式攻击受害者节点(节点10)。攻击以0包/秒的速率开始,并在攻击开始后5秒达到最大速率100包/秒。
DOS 10 2 11 12 BASIC 1234 0 512 RATE 100 10S 200S RAMP-UP-TIME 5
四、代码移植
QualNet中没有配置DOS攻击,可以从Exata中移植。...\exata-x.x-source\libraries\cyber\advanced\src\app_dos.cpp、app_dos.h。移植过程中,注意两个软件的函数定义、结构体定义的微小变化。贴出两个关键的函数,其他过程略。
1.初始化
void
APP_InitializeDosApplication(
Node* firstNode,
const char* cyberInput)
{
char appStr[MAX_STRING_LENGTH];
Node* node;
IdToNodePtrMap* nodeHash;
int numValues;
nodeHash = firstNode->partitionData->nodeIdHash;
/*DOS <victim> <num-of-attackers> <attacker1> <attacker2>...<attackerN> <attack-type> <port>
<num-of-items> <item-size> <interval> <start-time> <end-time>*/
char victimNodeStr[MAX_STRING_LENGTH];
NodeAddress victimNodeId;
Address victimAddr;
Node *victimNode;
sscanf(cyberInput, "%*s %s", victimNodeStr);
IO_AppParseSourceString(
firstNode,
cyberInput,
victimNodeStr,
&victimNodeId,
&victimAddr);
PARTITION_ReturnNodePointer(
firstNode->partitionData,
&victimNode,
victimNodeId,
TRUE);
Message *victimMsg;
char *victimInfo;
victimMsg = MESSAGE_Alloc(victimNode,
APP_LAYER,
APP_DOS_VICTIM,
MSG_DOS_VictimInit);
MESSAGE_SetInstanceId(victimMsg, 0);
victimInfo = MESSAGE_InfoAlloc(victimNode, victimMsg, strlen(cyberInput) + 1);
memcpy (victimInfo, cyberInput, strlen(cyberInput) + 1);
MESSAGE_Send(victimNode, victimMsg, 0);
}
2.事件处理
void AppDosVictimProcessEvent(Node* node, Message* msg)
{
switch (msg->eventType)
{
case MSG_DOS_VictimInit:
{
BOOL fromGUI = MESSAGE_GetInstanceId(msg);
char *inputString;
inputString = (char *)MESSAGE_ReturnInfo(msg);
std::string cyberInput = inputString;
App_InitializeDOSVictim(node, cyberInput, fromGUI);
MESSAGE_Free(node, msg);
break;
}
...
}
...
}