0

リプレイ攻撃を行う悪意のあるノードで AODV ネットワークをシミュレートする C++ コードのスニペットが必要です。これを OMNet++ プロジェクトに埋め込む必要があります。

OMNet++ のサンプル プロジェクトで元のコードを変更しようとしましたが、出発点に戻ってしまいました。

助けを見つけるのは素晴らしいことです。

文字数がかなり長いため、サンプル コードを含めることはできません。これまでの試行を確認する必要がある場合は、プロジェクトを共有できる場所を教えてください。

4

1 に答える 1

1

OPの質問には詳細が欠けているため、ウィキペディアの記事のリプレイ攻撃の例に従って模擬的な解決策を提供します。

アリスが自分の身元をボブに証明したいとします。ボブは身元の証明として自分のパスワードを要求し、アリスはそれを忠実に提供します (おそらくハッシュ関数のような変換の後)。その間、Eve は会話を盗聴し、パスワード (またはハッシュ) を保持します。インターチェンジが終了すると、イブ (アリスのふりをして) がボブに接続します。ID の証明を求められると、Eve は最後のセッションから読み取った Alice のパスワード (またはハッシュ) を送信し、Bob はこれを受け入れて Eve へのアクセスを許可します。


UDPPacket に送信元フィールドと宛先フィールドを追加して、特定のアプリケーションの目標を達成するために、新しいパケット (UDPPacket を拡張) を作成します。

cplusplus {{                
#include "<directory_path_for_the_udp_packet_goes_here>/UDPPacket_m.h"      // inheriting the parent class

}}

class ExtendedUDPPacket;    // you can call it whatever you want

message ExtendedUDPPacket extends UDPPacket 
{
    string sourceNode;          // name of the sender
    string destinationNode;         // name of the receiver
}

与えられた例の 3 つの異なるロールを見てみましょう。

  1. アリス: 認証が必要です
  2. ボブ: オーセンティケーター
  3. イブ:盗聴者

各ノードがその名前を保持する特定の ID を持っていると考える場合、各ロールに対して次のことができます。

アリス:

void MalAODVRouter::handleMessage(cMessage *msg)
{
    ExtendedUDPPacket *eUDPmsg = dynamic_cast<UDPPacket *>(msg);
    if (this->myID == eUDPmsg->getDestinationNode())      // myID is "Alice"
    {
        ExtendedUDPPacket *ExtendedUDPPacket= new UDPPacket();
        ExtendedUDPPacket->setSourceAddress(myID.c_str());
        ExtendedUDPPacket->setDestinationAddress(std::string("Bob").c_str());

        send(udpPacket, "ipOut");
    }
}

イブ:

void MalAODVRouter::handleMessage(cMessage *msg)
{
    ExtendedUDPPacket *eUDPmsg = dynamic_cast<UDPPacket *>(msg);
    if (this->myID != eUDPmsg->getDestinationNode())      // myID is "Eve"
    {
        ExtendedUDPPacket *ExtendedUDPPacket= new UDPPacket();
        ExtendedUDPPacket->setSourceAddress(std::string("Alice").c_str());  // fake the message
        ExtendedUDPPacket->setDestinationAddress(std::string("Bob").c_str());

        send(udpPacket, "ipOut");
    }
}

ボブ:

void MalAODVRouter::handleMessage(cMessage *msg)
{
    ExtendedUDPPacket *eUDPmsg = dynamic_cast<UDPPacket *>(msg);
    if (eUDPmsg->getSourceNode() == 'Alice')   
    {
        ExtendedUDPPacket *ExtendedUDPPacket= new UDPPacket();
        ExtendedUDPPacket->setSourceAddress(std::string("Bob").c_str());
        ExtendedUDPPacket->setDestinationAddress(std::string("Alice").c_str());


        send(udpPacket, "ipOut");
    }
}

これはモックの実装であることに注意してください。よりスマートな条件チェックを追加して、アプリケーションの動作を改善できます。

于 2015-05-25T11:13:37.757 に答える