2018年4月30日月曜日

Hacking:美しき策謀1

記録をつけると良いと聞いたので記録をつけます。
とりあえず「Hacking:美しい策謀 脆弱性攻撃の理論と実際」の第2版に取り組むことに。
環境はCygwin、gdbは多分元々入っていたはず。


 アクセス違反を確認する


 0x200のプログラミングの項目から飛ばし飛ばし。gdbを併用しながらC言語を学ぶみたいな項目です。わざとアクセス違反を起こすようなコードを書いて、デバッグ情報をつけてコンパイル(gcc -g)して、挙動を確認。

gdbは時々使っていたのですが、毎回コマンドを忘れる。
breakは関数名かアドレスかコードの行数で指定、但しアドレスを指定したいならアドレス頭に*をつけることを忘れない。メモリやレジスタの中身を確認したければexamineを略した x/(フォーマット)みたいな形でよさそう。
x/12i $ripとかにすると現在のアドレスから先が一気に確認できるので楽ですね(本は$eipだったのですがこの環境ではrでした、どうやら32bitと64bitの違いのようで)

レジスタを一気に確認したいときは info registersで、面倒ならi rで良し。

とりあえず実行するとstackdumpを吐いてくれるので、合わせて確認。

Exception: STATUS_ACCESS_VIOLATION at rip=00180197467
rax=00000001801FD9E0 rbx=0000000000000001 rcx=00000000FFFFD680
rdx=0000000000000000 rsi=000000000000000A rdi=0000000000000000
r8 =0000000000000000 r9 =000000000000000A r10=0000000100000000
Frame        Function    Args
00000000000  00180197467 (001004017D0, 00080808000, 000FFFFCBC0, 001801FD9E0)
000FFFFCBC0  001801976C5 (001802E6880, 0018021BF56, 000FFFFCC10, 00080808000)
000FFFFCBC0  0018017D3C1 (00080808000, 000FFFFCCC0, 000FFFFCC68, 00000000000)
000FFFFCBC0  0010040112E (000FFFFCC10, 300010F0100FF00, 00180047891, 00000000000)
000FFFFCCC0  00180047902 (00000000000, 00000000000, 00000000000, 00000000000)
00000000000  00180045693 (00000000000, 00000000000, 00000000000, 00000000000)

000FFFFFFF0  00180045744 (00000000000, 00000000000, 00000000000, 00000000000)
ブレークポイントを設定しつつ、rip=0x180197463に周辺を確認する。btでバックトレースを確認できる、デバッグ情報込みだからか名前も確認できる。本ではwhereで紹介されている。


(アドレスはstackdumpに書かれているものと同じ、だったらフレームってなんだろう)

ちなみにc-x 1で恰好いいモードに入れる。すごく恰好いい(けれどこれ使うならollydbg使った方が、という気持ちもある)

 問題個所は
movzx r13d,BYTE PTR[rbx-0x1]
の部分。実行前のrbxの値は0x1だったので計算すると0x0になり、これをアドレスにすると例外が入るという感じでしょうか。


そう言えば開始のアドレスってどう決まってるんだろう。


メモリのセグメント化

 スタックは高いから低い方向に成長する。rspがスタックポインタでrbpがベース子インタ。だからスタックが成長する時は、rbpをpushして、rspの値をrbpに押し込んでから、rspの値が引き算されることになる。下位から上位への流れの順に、rbp押し込み、各変数、callによる戻りアドレス書き込みがあって、呼び出し先でまたrbpの押し込み、変数…とやっているみたい。

セグメントは上位アドレスから順にテキスト(コード)、データ、bss、ヒープ、スタックという順とのこと。テキストは書き込み禁止にすることで、意図せぬ書き換えを防止する効果がある。
bssは初期化しなかった変数格納用で、ヒープはmallocとかの。アドレスの高い低いも重要情報の一つっぽい。

後はファイル管理やUNIXのユーザシステム周りだったので、そこそこに読んで、関数ポインタの話へ。運だめしゲーム面白かった。








2018年3月1日木曜日

CloudPebbleでapngを扱う時の注意点


久しぶりに覚書です。前にPebbleTimeでWatchfaceを作った時の色々でwindows上で作業するなら仮想マシンでやるしかないみたいなことを書きましたが、手軽さで言えばブラウザ上で開発できるCloudPebbleに軍配があがりますよね(サービス終了すると使えなくなるのが痛いですが)

最近はこちらを使うことが多くなってきたので、色々とメモです。

apng(animated PNG)を取り込んで使う時


watchface上でapngを使いたい場合は必ずRESOURCE TYPEを「Raw binary blob」に設定してください。それ以外では読み込みに失敗します(エラーは出ないまま画像は表示されないという形になります)。
余談ですがapngで透過を設定しても反映されず、エミュレータ上では白塗りになりました。ダメなんだろうか…
アニメーションの切り替え速度はあまり早いと切り替わらずに白や黒になります。


 

2017年10月4日水曜日

さくらVPS 512MBメモリでハニーポットをやってみる


ノリで借りてしまいました。さくらインターネットの現時点で一番安いVPS。512MBメモリ20GBSSDの構成で700円程のやつです。

とりあえずハニーポットを触ってみたかったので、設定してみることに。


ハニーポットを選ぶ

 「低対話型サーバ側ハニーポット」として、ssh特化のハニーポットソフトウェア「Cowrie」を選択しました。 始めは「Dionaea」を検討していたのですが、リンク切れを起こしていたのでちょっと保留(forkはあった)。


サーバー準備

勢いで借りたサーバーの起動準備ができたらスタート。CentOS7が乗っていたので、そのままCentOSで行くことに。

rootログイン、sshd_configでのrootログイン禁止、adduserでの別ユーザー生成くらいをやってから、CowrieのINSTALL.mdを参考に作業開始。

説明だとapt-getなのですが、CentOSだとapt-getが無いのでyumで。libssl-devが無いので調べるとopenssl-develが代用できそうなので、そちらをインストール。

また、Cowrie専用のユーザが必要ということで、そちらも用意。
virtualenvは色々設定した後にdesactivateで抜けます。

設定ファイルcowrie.cgfは、ポート番号の設定くらいで。
転送先のポートなどの設定が決まったら、firewall-cmdを利用してファイアウォールでポート転送の設定を。

このタイミングで何回か自分の環境からssh接続で応答なしが出ましたが、Cowrieを起動していないのにポート転送の設定を適用してしまっていたとか、そういう情けないミスが原因でした。

ダミーユーザについてはそのままに(後からログ見るとユーザ名adminが多かったのでそれも追加してもいいかもしれない)

ポート設定後は、~/cowrie/bin/cowrie startで起動。エラーが出ましたがメッセージを確認すると、いくつかパッケージ導入を失敗していたことが原因だったのですぐに解決。

起動後は、確認の為にログイン。偽のログイン先にあるディレクトリが「Richard」で面白味に掛けたので、~/cowrie/data/fs.pickleを調べると偽ディレクトリの設定があったので、適当なものに変更。


ログを見る

ログは~/cowrie/log/cowrie.logです。
設置してからすぐにユーザ名rootでアクセスがあり、入るなり「/gweerwe323f」というものを打ってきました。感染済みかどうかを調べているのでしょうか。
あの手この手で/gweerwe323fを探した後は、\x47\x72\x6f\70(Grop)という指定で色々書いたり消したりしているみたいです。

他には、ユーザ名adminで何回が接続しに来ていました。adminの方が数が多そうに見えるので、こちらも開放して何をするのか見てみるつもりです。

最安プラン雑感

応答が悪いだとか、処理が遅いだとか、そういうものはまだ感じていません。OSとCowrieを動かすためのもの達で、20GBの40%は埋まっています。ログがどれくらいの速度で増えていくのかまだ分かりませんが、そんなに悪くはないのかなと。