KippoBrinker » 履歴 » バージョン 1
kanata, 2025/04/13 13:56
| 1 | 1 | kanata | # KippoBrinker |
|---|---|---|---|
| 2 | |||
| 3 | {{toc}} |
||
| 4 | |||
| 5 | 結論だけ見たい人は最後の「第7回 ハニーポッター技術交流会(2020/1/25)で得た知見」を見て~ |
||
| 6 | |||
| 7 | |||
| 8 | --- |
||
| 9 | |||
| 10 | 先日、[すみだセキュリティ勉強会2015#2に参加してきました](https://raintrees.net/news/37) |
||
| 11 | |||
| 12 | すみだセキュリティ勉強会2015#2 |
||
| 13 | http://ozuma.sakura.ne.jp/sumida/2015/08/20152.html |
||
| 14 | |||
| 15 | ろば電子が詰まっている |
||
| 16 | http://d.hatena.ne.jp/ozuma/20150829/1440837066 |
||
| 17 | |||
| 18 | その中で、以下の知見を得ることができました。 |
||
| 19 | |||
| 20 | ## sshのポートをデフォルトの22/tcpから変えるべきか論争 |
||
| 21 | |||
| 22 | - sshのポートは、やっぱり22/tcpから変えましょう |
||
| 23 | - プリンタポート…具体的には9100/tcpから9107/tcpの8つのポートにするだけで隠れることができる |
||
| 24 | 9100/tcpはプリンタが使うポートで、一部の機種ではここに送られたデータをそのまま印刷するという機能を持ちます。バージョン情報取得のため、nmapでスキャンをすると大量の印刷をしてしまうおそれがあるため、デフォルトでスキャン対象していない。ため。 |
||
| 25 | |||
| 26 | - ポートスキャンをしても一発で分からないようにすればいい |
||
| 27 | - ssh分身の術により、大量のsshを見せる |
||
| 28 | |||
| 29 | ``` |
||
| 30 | _人人人人人人人人人人_ |
||
| 31 | > 突然の100個のssh < |
||
| 32 |  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ |
||
| 33 | ``` |
||
| 34 | |||
| 35 | |||
| 36 | |||
| 37 | **やってみた。** |
||
| 38 | 以下は、CentOS7で動作確認しています。 |
||
| 39 | |||
| 40 | |||
| 41 | # kippo |
||
| 42 | |||
| 43 | ## kippoとは |
||
| 44 | |||
| 45 | kippoとはsshっぽく振る舞うハニーポット |
||
| 46 | python(ver2系)製 |
||
| 47 | |||
| 48 | ## kippoのインストール |
||
| 49 | |||
| 50 | ### 必要なパッケージのインストール |
||
| 51 | |||
| 52 | ``` |
||
| 53 | # yum install python-devel |
||
| 54 | ``` |
||
| 55 | |||
| 56 | ### virtualenvによる仮想環境の作成(別に直でも問題ない) |
||
| 57 | |||
| 58 | virtualenvによる仮想環境を作ると、必要環境をユーザ環境にインストールできるようになる。 |
||
| 59 | よく解らない人は、[[python]]を参照。 |
||
| 60 | |||
| 61 | ``` |
||
| 62 | $ mkdir kippo |
||
| 63 | $ virtualenv --no-site-packages kippo |
||
| 64 | $ cd kippo |
||
| 65 | $ source bin/activate |
||
| 66 | (kippo)$ |
||
| 67 | ``` |
||
| 68 | |||
| 69 | ちなみに仮想環境抜ける時は、以下ね。 |
||
| 70 | |||
| 71 | ``` |
||
| 72 | (kippo)$ deactivate |
||
| 73 | |||
| 74 | ``` |
||
| 75 | |||
| 76 | ### 必要パッケージのインストール&kippoセットアップ |
||
| 77 | |||
| 78 | 仮想環境に必要パッケージをインストールする。 |
||
| 79 | twistedは、最新バージョンだと動かないので注意。 |
||
| 80 | 起動時にFailed to load application: 'module' object has no attribute 'IPluggableAuthenticationModules' |
||
| 81 | というエラーが出る場合、どうやら Twisted のバージョンの問題らしい。15.2.0 を入れることで解決する。 |
||
| 82 | |||
| 83 | |||
| 84 | ``` |
||
| 85 | (kippo)$ pip install twisted==15.2.0 |
||
| 86 | (kippo)$ pip install PyCrypto |
||
| 87 | (kippo)$ pip install pyasn1 |
||
| 88 | (kippo)$ git clone https://github.com/desaster/kippo |
||
| 89 | (kippo)$ cp -i kippo.cfg.dist kippo.cfg |
||
| 90 | (kippo)$ ./start.sh |
||
| 91 | ``` |
||
| 92 | |||
| 93 | 起動したら、セットアップ完了。動作を確認してみる。 |
||
| 94 | |||
| 95 | ``` |
||
| 96 | $ ssh localhost -p 2222 |
||
| 97 | ``` |
||
| 98 | |||
| 99 | root:123456でログインできる。 |
||
| 100 | |||
| 101 | ### 動作確認後 |
||
| 102 | |||
| 103 | 動作が確認できたら、以下をやっておこう。 |
||
| 104 | |||
| 105 | 停止 |
||
| 106 | |||
| 107 | ``` |
||
| 108 | (kippo)$ sh ./stop.sh |
||
| 109 | ``` |
||
| 110 | |||
| 111 | root:123456でログインできないようにする。 |
||
| 112 | |||
| 113 | ``` |
||
| 114 | (kippo)$ cd data |
||
| 115 | (kippo)$ cp -pi userdb.txt userdb.txt.org |
||
| 116 | (kippo)$ vi userdb.txt |
||
| 117 | |||
| 118 | - root:0:123456 |
||
| 119 | + [でたらめな文字列]:0:[でたらめな文字列] |
||
| 120 | ``` |
||
| 121 | |||
| 122 | |||
| 123 | # kippoBrinkerSumida |
||
| 124 | |||
| 125 | ## 概要 |
||
| 126 | |||
| 127 | kippoは、通常は1つの環境しか立ち上げられない。 |
||
| 128 | それを複数起動可能にするシェルスクリプトを作ってみた。 |
||
| 129 | |||
| 130 | ## インストール&セットアップ |
||
| 131 | |||
| 132 | kippoインストール先に、以下のファイルを置く。 |
||
| 133 | |||
| 134 | attachment:kippoBrinkerSumida.sh |
||
| 135 | attachment:kippoBrinkerStop.sh |
||
| 136 | |||
| 137 | 実行権を付与する。 |
||
| 138 | |||
| 139 | ``` |
||
| 140 | (kippo)$ chmod u+x kippoBrinkerSumida.sh |
||
| 141 | (kippo)$ chmod u+x kippoBrinkerStop.sh |
||
| 142 | ``` |
||
| 143 | |||
| 144 | ダミーとして起動したいポート番号を指定する。 |
||
| 145 | |||
| 146 | ``` |
||
| 147 | (kippo)$ vi kippoBrinkerSumida.sh |
||
| 148 | - KIPPO_PORT_LIST="1020 1021 1022 1023 1024 1025" # ダミーsshdのポートリスト |
||
| 149 | + KIPPO_PORT_LIST="任意のポート番号1 任意のポート番号2 任意のポート番号3..." # ダミーsshdのポートリスト |
||
| 150 | ``` |
||
| 151 | |||
| 152 | sshのバナーを合わせる。 |
||
| 153 | 自分のサーバのsshのバナーに合わせておかないと偽物だってバレちゃうので、自分のsshサーバのバナーを確認する。 |
||
| 154 | |||
| 155 | ``` |
||
| 156 | $ telnet localhost 22 |
||
| 157 | Trying ::1... |
||
| 158 | Connected to localhost. |
||
| 159 | Escape character is '^]'. |
||
| 160 | SSH-2.0-OpenSSH_6.7 |
||
| 161 | ``` |
||
| 162 | |||
| 163 | 上の結果だと、SSH-2.0-OpenSSH_6.7 がそれ。 |
||
| 164 | 確認したらCtrl+cで抜ける。 |
||
| 165 | |||
| 166 | 確認結果を設定する。 |
||
| 167 | |||
| 168 | ``` |
||
| 169 | (kippo)$ vi kippoBrinkerSumida.sh |
||
| 170 | - SSH_VERSION_STRING="SSH-2.0-OpenSSH_6.6.1" |
||
| 171 | + SSH_VERSION_STRING="SSH-2.0-OpenSSH_6.7" |
||
| 172 | ``` |
||
| 173 | |||
| 174 | このまま真似しないでね。みんなの環境とは、それぞれバージョンが違うはずだから。 |
||
| 175 | |||
| 176 | ## 起動 |
||
| 177 | |||
| 178 | 以下、実行するだけ。 |
||
| 179 | |||
| 180 | ``` |
||
| 181 | (kippo)$ ./kippoBrinkerSumida.sh |
||
| 182 | ``` |
||
| 183 | |||
| 184 | 起動完了後に、実際にsshっぽく見えるか確認してみよう。 |
||
| 185 | |||
| 186 | ``` |
||
| 187 | $ telnet localhost [設定したポート番号] |
||
| 188 | ``` |
||
| 189 | |||
| 190 | ### ウェルノンポートを指定してダミーを起動したい場合 |
||
| 191 | |||
| 192 | まず、前提としてkippoはユーザ権限で起動した方がいい。 |
||
| 193 | 万が一、kippoに脆弱性があった時に、root権限だったりすると死ぬ。 |
||
| 194 | |||
| 195 | しかし、ユーザ権限ではウェルノンポート(0~1023のポート番号)をBINDできない。 |
||
| 196 | でもウェルノンポートで起動したい場合もあるよね。 |
||
| 197 | Linuxの機能により、以下の方法でrootの一部権限をファイルに付与できる。 |
||
| 198 | |||
| 199 | ウェルノンポートでBINDする権限を付与 |
||
| 200 | |||
| 201 | ``` |
||
| 202 | # setcap CAP_NET_BIND_SERVICE+ep /[virtualenv環境]/bin/python |
||
| 203 | ``` |
||
| 204 | |||
| 205 | 確認は以下 |
||
| 206 | |||
| 207 | ``` |
||
| 208 | # getcap /[virtualenv環境]/bin/python |
||
| 209 | # /[virtualenv環境]/bin/python = cap_net_bind_service+ep |
||
| 210 | ``` |
||
| 211 | |||
| 212 | 権限剥奪は以下 |
||
| 213 | |||
| 214 | ``` |
||
| 215 | # setcap -r /[virtualenv環境]/bin/python |
||
| 216 | ``` |
||
| 217 | |||
| 218 | |||
| 219 | ## 停止 |
||
| 220 | |||
| 221 | 以下、実行するだけ。 |
||
| 222 | |||
| 223 | ``` |
||
| 224 | (kippo)$ ./kippoBrinkerStop.sh |
||
| 225 | ``` |
||
| 226 | |||
| 227 | |||
| 228 | |||
| 229 | |||
| 230 | # kippoBrinker |
||
| 231 | |||
| 232 | ## 概要 |
||
| 233 | |||
| 234 | kippoBrinkerSumidaには、1つデメリットがあって、ダミーsshを増やした分、プロセスが増えてリソースを圧迫します。 |
||
| 235 | 100個とかあげたら、それはもぅ大変な無駄遣いになりそう。 |
||
| 236 | そこで、こいつの登場です。こんな動きをします。 |
||
| 237 | 本物sshサーバは、22番からポート番号を変更している前提です。 |
||
| 238 | |||
| 239 | - ダミープロセスが、22番ポート(変更可)を開いて待ち受ける。釣りである。勝手にアクセスしてくる奴は悪意があると判断する。 |
||
| 240 | - 接続してきた奴がいたら、すぐさまコネクションを切断する。 |
||
| 241 | - すぐさまkippoをポート番号ランダムで25個(変更可)立ち上げる。 |
||
| 242 | - 30分したら、25個のダミーsshは落とす。 |
||
| 243 | - 再び、22番ポートで、釣り。最初に戻る。 |
||
| 244 | |||
| 245 | これなら、リソースを無駄に消費している状況が30分に抑えられます。 |
||
| 246 | まぁ、しつこくアクセスしてきたら変わらないんですけどね。 |
||
| 247 | |||
| 248 | |||
| 249 | |||
| 250 | ## インストール&セットアップ |
||
| 251 | |||
| 252 | kippoインストール先に、以下のファイルを置く。 |
||
| 253 | kippoBrinkerStop.shは、kippoBrinkerSumida.shと共用なので、導入済みならやらなくていい。 |
||
| 254 | |||
| 255 | attachment:kippoBrinker.sh |
||
| 256 | attachment:kippoBrinker.txt |
||
| 257 | attachment:kippoBrinkerDummyEntry.py |
||
| 258 | attachment:kippoBrinkerStop.sh |
||
| 259 | |||
| 260 | 実行権を付与する。 |
||
| 261 | |||
| 262 | ``` |
||
| 263 | (kippo)$ chmod u+x kippoBrinker.sh |
||
| 264 | (kippo)$ chmod u+x kippoBrinkerStop.sh |
||
| 265 | ``` |
||
| 266 | |||
| 267 | ダミー待受ポート番号、起動するkippoの多重度を、必要に応じて編集する。 |
||
| 268 | |||
| 269 | ``` |
||
| 270 | (kippo)$ vi kippoBrinker.sh |
||
| 271 | MY_IP_ADDR=`hostname -i|head -1|cut -d' ' -f2` # 自分のIPアドレスを設定(このIPでBINDする) |
||
| 272 | PROC_NUM="25" # ダミーsshdを何個立ち上げるか |
||
| 273 | EXEMPT_PORT_LIST="80 443" # ダミーsshdの対象外ポート |
||
| 274 | DUMMY_ENTRY_PORT="22" # ダミー待ち受けポート |
||
| 275 | ``` |
||
| 276 | |||
| 277 | sshのバナー情報を設定する。デフォルトでいくつか入れてあります。 |
||
| 278 | kippoBrinker.shは、ここからランダムに選択してダミーを起動する。 |
||
| 279 | 古くなったら、適宜新しいバージョンのバナーを追加するとよいだろう。 |
||
| 280 | |||
| 281 | ``` |
||
| 282 | $ cat kippoBrinker.txt |
||
| 283 | SSH-2.0-OpenSSH_6.7p1 Debian-5 |
||
| 284 | SSH-2.0-OpenSSH_6.7 |
||
| 285 | SSH-2.0-OpenSSH_6.6.1 |
||
| 286 | SSH-2.0-OpenSSH_6.2 |
||
| 287 | SSH-2.0-OpenSSH_6.0 |
||
| 288 | SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1 |
||
| 289 | SSH-2.0-OpenSSH_5.9 |
||
| 290 | SSH-2.0-OpenSSH_5.8p2_hpn13v11 FreeBSD-20110503 |
||
| 291 | SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5 |
||
| 292 | SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu6 |
||
| 293 | SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7 |
||
| 294 | SSH-2.0-OpenSSH_5.5p1 Debian-6 |
||
| 295 | SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze1 |
||
| 296 | SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2 |
||
| 297 | SSH-2.0-OpenSSH_5.3 |
||
| 298 | ``` |
||
| 299 | |||
| 300 | ### ウェルノンポートを指定してダミーを起動したい場合 |
||
| 301 | |||
| 302 | 上のkippoBrinkerSumidaと同じ。 |
||
| 303 | |||
| 304 | ## 起動 |
||
| 305 | |||
| 306 | 以下、実行するだけ。 |
||
| 307 | |||
| 308 | ``` |
||
| 309 | (kippo)$ ./kippoBrinker.sh |
||
| 310 | ``` |
||
| 311 | |||
| 312 | 以下、やってみると動作を確認できる。 |
||
| 313 | すぐさま切断されて、kippoが起動していく。 |
||
| 314 | |||
| 315 | ``` |
||
| 316 | telnet localhost 22 |
||
| 317 | ``` |
||
| 318 | |||
| 319 | ## 停止 |
||
| 320 | |||
| 321 | 以下、実行するだけ。 |
||
| 322 | kippoBrinkerSumida.shで実行してある分があれば、もろとも一緒に停止する。 |
||
| 323 | |||
| 324 | ``` |
||
| 325 | (kippo)$ ./kippoBrinkerStop.sh |
||
| 326 | ``` |
||
| 327 | |||
| 328 | # 第7回 ハニーポッター技術交流会(2020/1/25)で得た知見 |
||
| 329 | |||
| 330 | [第7回 ハニーポッター技術交流会](https://hanipo-tech.connpass.com/event/160302/)で登壇しました |
||
| 331 | |||
| 332 | {{rawhtml(<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://hanipo-tech.connpass.com/event/160302/" data-iframely-url="//cdn.iframe.ly/qR9wn4e?iframe=card-small"></a></div></div><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>)}} |
||
| 333 | |||
| 334 | すごいね…難読化シェル芸の時もそうでしたが、技術って発信すると集まってくる…最高 |
||
| 335 | |||
| 336 | つまりですね…こういう小難しいことしなくて良かったんです(5年間気づかなかった) |
||
| 337 | |||
| 338 | iptablesにポートリダイレクトを定義すればいい…と… |
||
| 339 | |||
| 340 | {{rawhtml(<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">すみません、先ほどの例はわかりにくいかったですね。訂正です。<br>例えば、cowrie(SSHハニーポット)を2222/tcpで待ち受けて、100個のポートリダイレクトを設定するイメージでしょうか。<a href="https://t.co/8aikpkt5ul">https://t.co/8aikpkt5ul</a></p>— ねこさん⚡🔜Ͷow or Ͷever🔙(ΦωΦ) (@catnap707) <a href="https://twitter.com/catnap707/status/1221248463569948674?ref_src=twsrc%5Etfw">January 26 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}} |
||
| 341 | |||
| 342 | # Memo |
||
| 343 | |||
| 344 | 雑記帳 - cowrieはkippoを改良したSSHハニーポット |
||
| 345 | http://yagamikou.hateblo.jp/entry/2015/09/25/015735 |