Geecul

Geekに踊ってカルチャーと寝る

リバースシェルについて自分なりに整理してみた

技術書を読んでいると「リバースシェル」という手法について説明されていたものの、自分の中でうまく整理できていなかったので整理してみた。

 

リバースシェルとは

攻撃対象から攻撃者に対してシェルを提供する仕組みのこと。

※悪意ある攻撃者はこれを利用することがある。

と言っても想像しづらいので以下に整理してみた。

 

リバースシェルの整理

通常サーバーにリモート接続する際には、サーバー側ではリクエストを待ち受けていて、自分の端末(クライアント)からサーバーに対し接続のリクエストを行い、接続が確立するとサーバー側のシェルを打鍵できるようになるというような流れです(SSH接続とかそんな感じですよね)。

f:id:youzine:20211110191339p:plain

図1:通常のクライアントサーバーモデルでの接続

この流れだと悪意ある人間、攻撃者にとってはどうもやりづらいらしいんですよね。

攻撃対象に接続しようと思うとファイヤーウォールに防がれて攻撃対象に接続できないためです。

f:id:youzine:20211110185757p:plain

図2:外からの不正な接続はファイヤーウォールが防ぐ

 

そこでどうするかというと、ファイヤーウォールは外から内への通信はよく防ぐけど内から外への通信は防がないような設定になっていることが多い。

その点を突いて、なんらかの方法(事前にマルウェアに感染させる等)で攻撃対象サーバー側からクライアント(ここでは攻撃者)に対してリクエストをするわけだ。

 

 

f:id:youzine:20211110193413p:plain

図3:マルウェアに感染したサーバーが攻撃者に対してリクエストを行う

 

そして接続が確立されると、サーバーのシェルが攻撃者に提供される。

そのため攻撃者がサーバーのシェルを打鍵して、色々な悪さができてしまうというわけだ。

f:id:youzine:20211110203259p:plain

図4:接続が確立されるとサーバー側のシェルを打鍵できるようになる

 

終わりに

ここで種明かしというわけでもないが、冒頭で読んでいた技術書というのは、『サイバーセキュリティプログラミング Pythonで学ぶハッカーの思考』だ。

この本の2.7章にリバースシェルについての記載がある。

そこで理解が追い付かなかったので整理してみたというわけである。

※サーバーがクライアントの役割を、クライアントがサーバーの役割をするというところがこんがらがるポイントだった。

本ではPython2系で記載されているためそのまま写経しても動かない。

ネット上には既にPython3に実装しなおしたものを記事もあるので、それらを参考にしながらPython3で実装しなおしてみるのがよい。

engineeringnote.hateblo.jp

 

色々調べていくとnetcatとかでもできるということだったので、時間あるときに自分の環境で試してみたいなと思う。

※記載に理解に誤り、誤解を招くような記載があると教えて頂けると助かります!

 

参考

en.wikipedia.org

mymanfile.com

engineeringnote.hateblo.jp

asuwa.hatenablog.com