takaha.siの技術メモ

勉強したことをお伝えします。ちょっとでも誰かの役に立てればいいな…

最近のディスアセンブラとかデバッガとかの話

ちょっとリバースエンジニアリングマルウェア解析ではない)をしないといけなくなったのでそこらへんのツールを探してみた。ここらへんの知識が2008年ぐらいで止まってるので、情報更新。

デバッガ

昔、バイナリ解析と言ったらOllyDbgが有名だったと思うんですが2014年を最後に更新が止まってしまっているようです。

じゃあ今の人たちは何を使ってるのかなぁ?って探すとx64dbgってのがいいみたいです。ちなみにx64と命名されてますが32bit版もあります。

x64dbg.com

OSS(GPLv3)でGitHubで開発されています。

コマンド体系は(MS製でWindowsのでバドラ開発とかに使う)WinDbgに似てるかなぁ。という感じ。bp ReadFileとかでWin32APIにブレークポイントしかけられます。

「いいなぁ」と思ったのは「ユーザーコードまで実行」というコマンドがあることで、これは嬉しいなと思いました。リバースエンジニアリングってのはWin32APIを手がかりにブレークポイント引っ掛けて、そこから解析していくと思うんですが、その時このコマンドを使えば、一気に解析対象のソフトウェアコードまで戻るわけです。

ディスアセンブラ

みんな憧れのIDA Proはまだ現役らしいですね。20年以上この業界でデファクトスタンダードの地位に留まれているのは素晴らしい。

とはいえ、IDA Proは10万円以上する高価なソフトウェアなので、別に本業でマルウェア解析してるわけでもない私みたいな個人が手軽に手を出すのはちょい辛いかなと思います。

ただ、IDA FreewareってのがあってIDA Proの機能限定版がタダで使えます。

www.hex-rays.com

ディスアセンブラなんですが、ディスアセンブルしたコードの参照関係のグラフを出してくれるのが嬉しいです。この昨日はIDA Freewareでも省かれてないので嬉しい。

SAIのサムネイルをWindows上のエクスプローラで見れるようにする

ペイントソフトSAIのファイルってWindowsエクスプローラでサムネイルが見れないですよね。これ地味に不便でなんとかしたい。SAIはものすごく良いソフトでペンが軽快で描いてて気持ち良いソフトなんで愛用してるんですが、このサムネイルが見れないというのにフラストレーションを感じていました。

検索するとSaiThumbsってのがあってこれをインストールするとWindowsエクスプローラから見れるようになります。

github.com

ここからダウンロードできます

https://wunkolo.itch.io/saithumbs

寄付してーって言われますが、一応寄付せずにダウンロードするだけもできます。「No thanks, just take me to the downloads」をクリックすればOK

ダウンロードして解凍して中の「install.bat」を実行すればOKです。エクスプローラからsaiファイルのサムネイルが見れるようになります。

f:id:tkh86:20200724174429p:plain
SAIのサムネイルが見れるようになる

SAI2は残念ながらまだないようです。

余談ですが、内部的にはlibsaiってのを使ってて、saiのファイルはほとんど解析されてるようです。

github.com

saiのファイルは暗号化がかかってるというのはバイナリエディタで中をみてぼんやりと感じてたんですが、見事に解析してますね。。。すごいなぁ。。。

VPSのvultrがいいよって話

www.vultr.com

vultrというVPSサービスがある。最近ちょくちょく聞くので使ってみた。用途はT-potの運営のためのサーバを借りるため。AWS EC2上で運用しようかなと思ったけどEC2はisoイメージからのインストールの際、まずはじめにS3にisoイメージを上げてーとかちょっと面倒なことをしないといけない。ので、ついでにvultr使ってみようかなと思った。VPSで有名所といえば、あとはさくらVPSがあるけど、さくらVPSはもう使っていて何台か借りてる。のでものは試しでvultrにしてみた。

ちょっと使ってみたところ、AWS Lightsailと比べて(VPS単体で見れば)Vultrのほうが機能面で充実しているかなとおもった。S3とかDynamoDBとかRDSとかと組み合わせないのであればVultrのほうが良い気がします。とはいえ、Vultrもブロックストレージ(AWS EBS相当のもの)とオブジェクトストレージ(AWS S3互換のよう)とLoad Balancerはあるみたいです。

以下箇条書き

  1. isoイメージからの起動ができる。自分で好きなisoイメージをアップロードしてそこからBootしてインストール可能。Lightsailはできない。
  2. Webコンソールの画面操作はVGAVNC経由で飛ばしている。LightsailはWebコンソールもSSH経由なのでiptablesとかでしくじると復旧の手段が完全に絶たれるが、vultrはそんなことはない
  3. セキュリティインシデントあるとメールで警告してくれる。
  4. いまなら100USDクレジットくれる!
  5. 支払いにBitcoin (BTC)とBitcoin Cash (BCH)が使える!まあネタだと思うけど、PRQかよw

ただ、課金形体がプリペイド式で独特です。クレジットカードで課金するとVultr内のクレジットにチャージできて、そのクレジットから毎時間の使用量が引き落とされる感じです。この点AWS Lightsailのように1ドル単位で使用した料金をクレカから引き落としてしくれるわけではないみたいです。この点はちょっとLightsailと比べると柔軟性が低いかもしれません。

ところで、この請求の仕方をライバルのさくらVPSと比べると、時間単位請求という点で一見さくらVPSよりは柔軟のように見えるが一長一短あるかなという感じ。プリペイド方式なので「使った金額がそのまま月額課金される」わけではなく「事前にプリペイドでチャージしておかないといけない」わけで、実際の使用量よりも多くチャージしないとクレジットが足りないのでやむなく多めにチャージするけど端数が出てしまうという感じになりそうです。ここで個人使用だとちょっと拒否感が出る人がいるかもです。さくらVPSはたしかに時間単位請求はしてくれませんが、月額のみがクレジットカードから引き落とされますのでプリペイドチャージで使用しきれない端数が出ることはないわけです。

あと、上述しましたが、今だと100USDクレジットただでもらえるので、インスタンスにもよりますが、二ヶ月ぐらいはただで使えますよ。太っ腹!

なお、上のリンクは私へのアフィリンクになってますので踏んでくれると私にクレジットが入りますのでぜひ踏んでください ;-)

AWS Lightsail上でT-potは運用しないほうがいいという話

AWS Lightsail上でDebianVMインスタンスを借りて、その上でT-potをインストールした。

最初の方はうまく動いていたのだが、1時間ぐらいするとVMが落ちる問題が発生。SSHはもちろんのことpingすら通らなくなる。AWSのWebIFからVMの再起動をかけると再び上がってくるが、また1時間ほど放置するとVMが落ちる。これでは使い物にならない。なお、AWS LightsailのWebIFはSSH経由なのでこうなってしまうとVMにアクセスする方法がなくなるので調査も面倒だった。再起動するしかない。これ使い勝手悪いよね。。。せめてシリアルポート経由にしてもらえないか?と思う。

ログやらなんやらを色々みて何が起こっているかはわかったので、誰かの役に立つかもしれないので一応書き残しておく。

まずAWS LightsailにはNATがある。VMが直接グローバルIPのセグメントにぶら下がってるわけではない。NATの後ろに隠れている。そんで、そのNATの内部のプライベートIPはDHCPで降ってくる。

で、このNAT内部のプライベートIPのリース期間が短い。3000sec前後しかないのである。したがってこのDHCPのIPリース期間が切れるとIPが剥奪されて一切の通信ができなくなるのである。これが落ちてた原因

dhclientのリース期間が切れたときは当然dhclientが再取得するはずだが、T-potインストール後の環境にはこのdhclientが常駐してない。だから再取得も行われるそのまま沈黙してしまう。

他のT-potをインストールしていないLightsailインスタンスには確かにdhclientが常駐している。T-potがインストール時にこの設定を消してしまうのだろう。

f:id:tkh86:20200712061730p:plain
他のLightsailインスタンスにはdhclientが常駐

ところで、よくわかってないのだが、dhcpのリース期間を無限に設定してある自宅LAN環境のLinuxサーバではdhclientは常駐してない。リース期間が有限だとNetworkManagerあたりが自動的に立ち上げるのかしら?ここらへんは調べてもよくわからなかった。

じゃあdhclient起動すればいいんでしょ!ってんで手動でdhclientを立ち上げてみたらどうか?と思い。以下のコマンドを叩いた。

# dhclient -r -v eth0 && rm /var/lib/dhcp/dhclient.* ; dhclient -v eth0

すると、たしかに1時間たってもVMは落ちなくなった。

しかしまたもや問題発生。1時間ではVMは落ちなくなったが、今度は4時間後ぐらいにまたVMが落ちてしまう問題が発生した。時間が伸びただけでやっぱり落ちるのである。

Jul 01 01:52:45 rapidassistance dhclient[19188]: DHCPREQUEST for 172.26.3.244 on eth0 to 172.26.0.1 port 67
Jul 01 01:52:45 rapidassistance dhclient[19188]: DHCPACK of 172.26.3.244 from 172.26.0.1
Jul 01 02:18:04 rapidassistance dhclient[19188]: DHCPREQUEST for 172.26.3.244 on eth0 to 172.26.0.1 port 67
Jul 01 02:18:04 rapidassistance dhclient[19188]: DHCPACK of 172.26.3.244 from 172.26.0.1
Jul 01 02:44:37 rapidassistance dhclient[19188]: DHCPREQUEST for 172.26.3.244 on eth0 to 172.26.0.1 port 67
Jul 01 02:44:37 rapidassistance dhclient[19188]: DHCPACK of 172.26.3.244 from 172.26.0.1
Jul 01 03:08:46 rapidassistance dhclient[19188]: DHCPREQUEST for 172.26.3.244 on eth0 to 172.26.0.1 port 67
Jul 01 03:08:46 rapidassistance dhclient[19188]: DHCPACK of 172.26.3.244 from 172.26.0.1
Jul 01 03:27:39 rapidassistance dhclient[403]: Internet Systems Consortium DHCP Client 4.4.1
Jul 01 03:27:39 rapidassistance dhclient[403]: For info, please visit https://www.isc.org/software/dhcp/
Jul 01 03:27:39 rapidassistance dhclient[403]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
Jul 01 03:27:39 rapidassistance dhclient[403]: DHCPOFFER of 172.26.3.244 from 172.26.0.1
Jul 01 03:27:39 rapidassistance dhclient[403]: DHCPREQUEST for 172.26.3.244 on eth0 to 255.255.255.255 port 67
Jul 01 03:27:39 rapidassistance dhclient[403]: DHCPACK of 172.26.3.244 from 172.26.0.1
Jul 01 03:27:39 rapidassistance dhclient[428]: Internet Systems Consortium DHCP Client 4.4.1
Jul 01 03:27:39 rapidassistance sh[414]: Internet Systems Consortium DHCP Client 4.4.1
Jul 01 03:27:39 rapidassistance sh[414]: For info, please visit https://www.isc.org/software/dhcp/
Jul 01 03:27:39 rapidassistance dhclient[428]: For info, please visit https://www.isc.org/software/dhcp/
Jul 01 03:27:39 rapidassistance sh[414]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
Jul 01 03:27:39 rapidassistance sh[414]: DHCPOFFER of 172.26.3.244 from 172.26.0.1
Jul 01 03:27:39 rapidassistance sh[414]: DHCPREQUEST for 172.26.3.244 on eth0 to 255.255.255.255 port 67
Jul 01 03:27:39 rapidassistance sh[414]: DHCPACK of 172.26.3.244 from 172.26.0.1

ログをみると、Jul 01 03:27:39まではdhclientはご機嫌でIPのリースを更新してくれているようだが、それ以降ログが途切れている。誰かがNetworkManager周りに再起動をかけたのか?このとき、僕が手動で起動したdhclientも殺されてまたDHCPリースが切れたときにIPが消えて落ちているようだ。元の木阿弥である。

じゃあdhclientをsystemdで起動してWatchdogでプロセスが殺されても復活するようにすればいいのでは?とおもってsystemdのconfigを書いてdhclientを起動させた。。。

ところでどうやら何やら不味いことをやってしまったらしく、systemd start dhclient.serviceとやった瞬間VMが落ちた。すでにenableにした後だったのでAWSのWebIFから再起動をかけてもSSHにはつながらない。\(^o^)/オワタ

AWSのWebIFはSSH経由での接続しかサポートしてないのでこうなってしまうとどうやってもVMにはアクセスできなくなるのでインスタンスを削除してOS再インストールからやり直しである。

ここで心が折れた。もうAWS Lightsail上でのT-pot運用は諦めることにする。。。これ以上は面倒くさいし不毛だ。。。

T-potはOSごと含めたISOイメージからのインストール手段も提供している。ので、EC2でインスタンスを借りて、ISOイメージからインストールしてみようかなと思う。

というわけでLightsailでT-potの運用は面倒くさいんでやめたほうがいいという結論になりました。

MacがARMになることによって開発者が死ぬ可能性が高い件について

この間のWWDC 2020を見ていて発狂しそうになった。MacがCPUをIntelからARM(Apple Silicon)に移行するらしい。なぜそんなことをするのかさっぱりわからない。たしかに、AppleがISAを変えるのは今に始まったことではないが、今と昔では事情が違う。過去の時代遅れの成功体験に引っ張られてるのではない か?意味がわからない。ジョブズが居なくなったAppleのときみたいに潰れ(かけ)なきゃ良いけどね。。。

私がそう思う理由は、Mac上でx86のVMM(VirtualBoxParallels)が動かなくなるから。

VMMはISAレベルのエミュレーションを提供するソフトウェアであるが制約がある。物理ISAと同一のISAしかエミュレーションできない。しかしその分エミュレータと比較すると高速に動作する。その秘密は、特権命令やSensitive命令以外は可能な限り直接物理CPUで動かすから。要は、どうしてもエミュレーションしないと問題になるようなインストラクション(mov cr3, eaxとかsgdtとかpushf, popfとかね)以外は全部物理CPUに直接実行させるのである。これが速さの秘訣。I/Oを含んだり、よほどの作為的なプログラムでなければほとんど実CPUで実行してるのと変わらない速度で動作する。

つまりARMに移行されてしまうと、Mac上で(x86の)Linuxを動かして開発することが一切できなくなる。Mac版のDocker使ってる人も同じ。あれはVirtualBox上でLinuxを動かしてその上でDockerを動かしてるわけだからね、一切使えなくなる。

いやいやRosetta 2とやらがあるらしいよ?エミュレーターx86環境が動くとか?いやだからそれはエミュレーターなんだよね。ソフトウェアでCPUのすべての機能を模倣するわけ。VMMとは比較にならないほど遅い。理由は上述したとおり。今どきVirtualPCにもどりたいの?これは明らかな退行である。

いやいやARM版Windows 10では既存のx86アプリケーションがそのまま実用的な速度で動くだろう?だから、ARMの上で動作するRosetta 2とやらでx86やEMT64のOSも十分実用的な速度でうごくのでは?それは間違ってる。そもそもABIレベルのエミュレーションでなんとかなるようなバイナリと、ISAレベルのエミュレーション(特にMMU込みで)が必要なバイナリを味噌糞一緒にして論じちゃいけない。エミュレーションのコストが段違い。特にMMU周りは本来ハードウェアでやってるはずのTLB周りの挙動なんかをまるっとソフトウェアでそっくり模倣することになるのだからこのオーバーヘッドはかなり大きい。VT-xやAMD-SVMでまたEPTやNested Pagingが実装されてなかった10年以上前に逆戻りしたいの?これも明らかな退行である。

というわけでなんか色々許容できない。

いやわかってるわかってる。そもそも今日びISAなんて意識しないじゃん?みんなJavaScriptしか書いてないじゃん?それかGCPAWS Lambdaしか使ってないじゃん?どうしてもLinuxが使いたかったらARM版のVMMでARM版のLinux動かせばいいじゃない?

うんそうかもね。でも私は嫌だねそんなの。x86が使いたいよね。x86Linuxカーネル動かしたいよね。本番環境でARM機なんて使ってるの?使ってないでしょ。

というわけでおそらくMacは開発機としては終わりだろうなと思うわけです。

よくよく考えてみると、今のWindowsにはWSL2なんかもあって、Mac OS固執する理由などどこにもないかもしれない。が、Retinaが使えなくなるのは寂しい。あのきれいな画面でコーディングできなくなるのだ。この一点においてMacに後ろ髪をひかれる。

とはいえ富岳といいMacといいARMの隆盛は無視できない。ISA全然しらないし。VMMでも作ってみようかな?と思っている。

噂のGoogle製セキュリティスキャナtsunamiを使ってみた

Googleがセキュリティスキャナ作ったってんでニュースになってたので試してみる。

www.publickey1.jp

ソースはここ

github.com

nmapとncrackが必要とのことなので事前にインストールしないとかないといけない。

あと、スキャナのテスト用に脆弱性をわざと作ったアプリケーションがdockerイメージで配布されてるのでテストにはそれを使うといいようだ。そこらへんはQuick Startに書いてあるんで読んでその通りにやればいい。

なお、Javaで書かれてるようでJavaのインストールが必要。OpenJDKでいける。

今回私は自分が管理してるWebサイトに試してみた(一部IPがわからないようにログを改変してます)

実行してみるとだーーーっと以下のようなログが流れる。

情報: Executing the following command: '/usr/bin/ncrack -T3 --user ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,ec2-user,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant --pass summer,love,ashley,6969,nicole,chelsea,biteme,matthew,access,yankees,987654321,dallas,austin,thunder,taylor,matrix,,123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,696969,shadow,master,666666,qwertyuiop,123321,mustang,1234567890,michael,654321,pussy,superman,1qaz2wsx,7777777,fuckyou,121212,000000,qazwsx,123qwe,killer,trustno1,jordan,jennifer,zxcvbnm,asdfgh,hunter,buster,soccer,harley,batman,andrew,tigger,sunshine,iloveyou,fuckme,2000,charlie,robert,thomas,hockey,ranger,daniel,starwars,klaster,112233,george,asshole,computer,michelle,jessica,pepper,1111,zxcvbn,555555,11111111,131313,freedom,777777,pass,fuck,maggie,159753,aaaaaa,ginger,princess,joshua,cheese --pairwise -f ssh://x.x.x.x:22 -oN /tmp/ncrack5895062353493684709.report'
6月 24, 2020 4:38:50 午前 com.google.tsunami.common.command.CommandExecutor execute
情報: Executing the following command: '/usr/bin/ncrack -T3 --user vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,vagrant,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser --pass amanda,summer,love,ashley,6969,nicole,chelsea,biteme,matthew,access,yankees,987654321,dallas,austin,thunder,taylor,matrix,,123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,696969,shadow,master,666666,qwertyuiop,123321,mustang,1234567890,michael,654321,pussy,superman,1qaz2wsx,7777777,fuckyou,121212,000000,qazwsx,123qwe,killer,trustno1,jordan,jennifer,zxcvbnm,asdfgh,hunter,buster,soccer,harley,batman,andrew,tigger,sunshine,iloveyou,fuckme,2000,charlie,robert,thomas,hockey,ranger,daniel,starwars,klaster,112233,george,asshole,computer,michelle,jessica,pepper,1111,zxcvbn,555555,11111111,131313,freedom,777777,pass,fuck,maggie,159753,aaaaaa,ginger,princess,joshua --pairwise -f ssh://x.x.x.x:22 -oN /tmp/ncrack13461111013196007040.report'
6月 24, 2020 4:38:53 午前 com.google.tsunami.common.command.CommandExecutor execute
情報: Executing the following command: '/usr/bin/ncrack -T3 --user azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser,azureuser --pass cheese,amanda,summer,love,ashley,6969,nicole,chelsea,biteme,matthew,access,yankees,987654321,dallas,austin,thunder,taylor,matrix --pairwise -f ssh://x.x.x.x:22 -oN /tmp/ncrack3059916208301440638.report'
6月 24, 2020 4:38:56 午前 com.google.tsunami.plugins.detectors.credentials.ncrack.NcrackWeakCredentialDetector detect
情報: Ncrack weak credential detection finished in 1.163 min.
6月 24, 2020 4:38:56 午前 com.google.tsunami.workflow.DefaultScanningWorkflow generateScanResults
情報: Tsunami scanning workflow done. Generating scan results.
6月 24, 2020 4:38:56 午前 com.google.tsunami.workflow.DefaultScanningWorkflow lambda$runAsync$0
情報: Tsunami scanning workflow traces:
  Port scanning phase (1.197 min) with 1 plugin(s):
    /Tsunami Dev (tsunami-dev@google.com)/PORT_SCAN/NmapPortScanner/0.1
  Service fingerprinting phase (183.7 ms) with 0 plugin(s):
  Vuln detection phase (1.163 min) with 5 plugin(s):
    /Tsunami Team (tsunami-dev@google.com)/VULN_DETECTION/NcrackWeakCredentialDetectorPlugin/0.1 was selected for the following services: ssh (TCP, port 22), http (TCP, port 80), http (TCP, port 443)
    /Tsunami Team (tsunami-dev@google.com)/VULN_DETECTION/YarnExposedManagerApiDetector/0.1 was selected for the following services: ssh (TCP, port 22), http (TCP, port 80), http (TCP, port 443)
    /Tsunami Team (tsunami-dev@google.com)/VULN_DETECTION/JenkinsExposedUiDetector/0.1 was selected for the following services: ssh (TCP, port 22), http (TCP, port 80), http (TCP, port 443)
    /Tsunami Team (tsunami-dev@google.com)/VULN_DETECTION/JupyterExposedUiDetector/0.1 was selected for the following services: ssh (TCP, port 22), http (TCP, port 80), http (TCP, port 443)
    /Tsunami Team (tsunami-dev@google.com)/VULN_DETECTION/WordPressInstallPageDetector/0.1 was selected for the following services: ssh (TCP, port 22), http (TCP, port 80), http (TCP, port 443)
  # of detected vulnerability: 0.
6月 24, 2020 4:38:56 午前 com.google.tsunami.main.cli.TsunamiCli run
情報: Tsunami scan finished, saving results.
6月 24, 2020 4:38:56 午前 com.google.tsunami.common.io.archiving.RawFileArchiver archive
情報: Archiving data to file system with filename '/tmp/tsunami-output.json'.
6月 24, 2020 4:38:56 午前 com.google.tsunami.main.cli.TsunamiCli run
情報: TsunamiCli finished...
6月 24, 2020 4:38:56 午前 com.google.tsunami.main.cli.TsunamiCli main
情報: Full Tsunami scan took 2.409 min.

ええとこれさ。。。ひょっとしてnmapとncrackをテンプレコマンドで呼び出してるだけ?いや、だけとか言ったら失礼なのかな?そのテンプレに高度なノウハウが詰まっているんだよ!とか言われたらまあそうかなという気がしないでもないけど、でもなんかよく見るnmapやncrackの呼び出しに見える。

あとJava製なんですが、ただのテンプレコマンドをたれ流すだけならPythonとかで書けばいいんでは?なんでJavaで書くの???コンパイルすんのだるくない?そこら編の技術的なチョイスも謎い。

というわけで、G製ということで期待したんですが、、、なんかこう肩透かしを食らってアレな感じでした。

Lightsail上のVMにT-Potをインストールしたらネットワークが落ちる

スーパーハカーになりたいので、ハニーポットを運用してマルウェアを集めたいと思いました。ので、AWSのLightsail上でVMインスタンスを借りてT-potをインストール。

github.com

ちなみにハニーポットと言えばT-potというぐらい代表的なもののようです。脆弱性のあるサービスになりすますソフトウェアがDocker上で立ち上がって罠を仕掛ける感じ。KibanaでのキレイなWebIFもついてきてて、イケてます。かっこいい!気分はスーパーハカーですよ。

f:id:tkh86:20200630233632p:plain
T-potのWebインタフェース

日本国内でもいくつか記事が見つかります。

ultrabirdtech.hatenablog.com

qiita.com

ISOイメージからインストールする方法もありますが、私はDebianを入れた後、Post-Install手法でやりました。Lightsailだとそうせざるを得ない。

github.com

で、T-potインストール自体はすんなり行ったんですが、問題発生。VMを起動して1時間後ぐらいにネットワークが急に落ちます。

LightsailはWebIFからのVMアクセスをSSH経由に限定しているので、こうなってしまうと何もできなくなります。せめて、シリアル経由かレガシーVGA経由でのコンソソールアクセスを用意してほしいもの。。。これだと、例えばiptablesで自分の乗ってる枝を切ってしまったら何もできなくなり、OS再インストールしか手はない。怖い。なんとかしてくれんもんかな。

話がそれましたが、AWS LightsailのWebコンソールから「再起動」かけると再びVMは立ち上がってネットワークも通じるようになってT-potも動き始めます。が、また一時間ぐらい立つとネットワークが落ちます。これでは安定してT-potを起動し続けることができずにまずい。

VMがkernel oopsとかでOSごと落ちているのではなく、単にネットワークインターフェイスが落ちてるだけのように見えるので、ip a listの出力をディスクに書き出すという以下のようなスクリプトをくんでログをとって見てみました。

#!/bin/sh

LOG_FILE_NAME=ip.log

while :; do
    /bin/echo -e "====$(date +'%Y/%m/%d:%H:%M:%S')==== \n $(ip a list)" >> ${LOG_FILE_NAME}
    sleep 10
done

すると、たしかにネットワークIFからIPが消えている。

====2020/06/26:00:22:07====
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 06:d0:84:8b:f5:18 brd ff:ff:ff:ff:ff:ff
    inet 172.26.3.244/20 brd 172.26.15.255 scope global dynamic eth0
       valid_lft 6sec preferred_lft 6sec
====2020/06/26:00:22:17====
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 06:d0:84:8b:f5:18 brd ff:ff:ff:ff:ff:ff

というか、単純にvalid_lft 6secと出たあとにIPが消えてるので、DHCPのリース期間が過ぎてそのままIPが消えてるだけのように見えます。

ちなみにLightsailはNATがあって、NAT外側のパブリックIPは固定IPにできますが、NAT内部のプライベートIPはDHCPで動的取得のみのようです。だから、Lightsail VMで外部サービスを起動したい場合、AWS LightsailのWebコンソールからNATのポート開放をしてあげないと外からはつなぎにいけません。

しかしこれ、謎い。なぜリース期間が消えてるのにDHCP再取得しにいかないのか。。。

T-potをインストールしていない他のLightsail VMではこのようなことは当然おこらないので、T-potがなにか設定をいじったのだと思いますが。。。謎い。。。

iptablesの設定でDHCPのパケットが弾かれてるのかな?と思ったので

# dhclient -r -v eth0 && rm /var/lib/dhcp/dhclient.* ; dhclient -v eth0

とやってみたけど、ログを観る限り

$ journalctl -f | grep -Ei 'dhcp'
Jun 30 22:48:17 rapidassistance dhclient[19179]: Internet Systems Consortium DHCP Client 4.4.1
Jun 30 22:48:17 rapidassistance dhclient[19179]: For info, please visit https://www.isc.org/software/dhcp/
Jun 30 22:48:17 rapidassistance dhclient[19179]: DHCPRELEASE of 172.26.3.244 on eth0 to 172.26.0.1 port 67
Jun 30 22:48:17 rapidassistance dhclient[19188]: Internet Systems Consortium DHCP Client 4.4.1
Jun 30 22:48:17 rapidassistance dhclient[19188]: For info, please visit https://www.isc.org/software/dhcp/
Jun 30 22:48:17 rapidassistance dhclient[19188]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
Jun 30 22:48:17 rapidassistance dhclient[19188]: DHCPOFFER of 172.26.3.244 from 172.26.0.1
Jun 30 22:48:17 rapidassistance dhclient[19188]: DHCPREQUEST for 172.26.3.244 on eth0 to 255.255.255.255 port 67
Jun 30 22:48:17 rapidassistance dhclient[19188]: DHCPACK of 172.26.3.244 from 172.26.0.1

と、DHCP DISCOVER->DHCP OFFER->DHCP REQUEST->DHCP ACKとDHCP取得がちゃんとできてるので、パケットが弾かれているとは考えにくい。うーん謎い。。。