OWASP DAY 2016 Spring MINI Hardening writeup(?)

同期から教えてもらって Hardening に参加できたらいいなー,
と思ってポチったら無事当選でき参加してきた.

チーム

4人1チームだったのだけれど,1人は最初からメールの返信もなく,当日も現れなかった….
偶然なのか何なのか同じ会社の人もチームメンバーでとても驚いた.

シナリオ

与えられたシナリオは簡単にはざっと以下のような感じ(足りないとこもありそう).

  • LAMP 環境の Web サイトが与えられる
  • Web サイトは Wordpress で構築されている
  • FTP を使ってサイトのファイルを更新している
  • IT 担当のアカウントが3つ転がっている
  • 競技者は unyou アカウント or 自分で作ったアカウントを利用する

採点は, ftp や http などが上がってるかどうかで(全部で4つあった),
前のスクリーンに映しだされていたが,小さくてよく見えなかった.
とりあえず自分のチームの位置をチームメンバーの人に教えてもらったので,
赤いものを青くするように頑張る感じ.

競技内容

何も考えず始まった瞬間に yum update をかけるも,
ミラーサーバにつながらない.そういう話ではないのか,と理解した.

それならとりあえず怪しいプロセスはいないかと思って, ps aux してみたけど,
そんな変なプロセスが変なユーザで常時動いてる,という感じではなさそうだった.

cron で怪しいものとか動かしてないかなー,とか思って sudo crontab -l してみると,
なんか 5分ごとに動いている healthcheck があった.
中身をみてみると難読化された python のコードでどうみても怪しいので,
とりあえず該当の cron をコメントアウトして動かないようにした.

次に, /var/log 以下を適当に漁ってみたけど,色々ありすぎてとっかかりが見つからない.
ただ, /var/log/secure を眺めてると過去に大量ログインに失敗しているログがあって,
攻撃を受けていた,ということがわかった.

侵入されている可能性もありそうで,とりあえずユーザ一覧を眺めようと思って,
/etc/passwd を見てみると, vnyou とかいうどうみても怪しいやつがいた.
id vnyou してみると root 権限をもっているしこいつはダメだということになり,
チームメンバーに通報して vnyou ユーザを抹殺.

とっかかりが見えたので, /var/log 以下を vnyougrep してみると,

  • IT 担当のアカウントのうち ken が割られて vnyou を追加している
  • ftpchroot_list(だったっけ?)に vnyou を追記している
  • www 以下に .test みたいなディレクトリを掘って怪しいファイルを設置している(2箇所)
  • (既に止めていた) healthcheck ファイルを配置している

と,侵入されてからやられていることはこんな感じだった.
とりあえず, chroot_list から vnyou を削除.
www 以下に置かれた怪しいファイルを見てみると難読化されていてさっぱり読めなかったが,
どうみても怪しいので,2ファイルとも削除.
cron で叩いてる healthcheck は最初に止めたので,
これで ken が割られて怪しいことをされたところは一通りなんとかできた.

スコアボードを見てみるとどうやらまだ ftp が赤く,
チームメンバーと色々相談したり,運用ルールを見ながら変なところを探して,
設定を色々変えてみたけど青くならず.

みんなで, ftp と戦っているうちに運営からみんな攻撃にさらされてますよ!!!
的なアナウンスがあって,マジで!? と思ってスコアボードをみてみると,
他のチームは全部赤くなったりしていたけど,うちは特に変わらず ftp だけ赤い.
さっき消したバックドア周りから攻撃されたっぽいようでうちは大丈夫だった.

その後,チームメンバーとずっと ftp と戦ってたけどさっぱりわからんかった.

最後の数分で突然運営から,みんなよく出来ていて面白くないので突発的に攻撃します!!!
と言われて,攻撃を受けると httpd が刺さって死亡.
刺さってる httpd はどうしようもないので,とりあえず restart かけてあげた.
そんなこんなで,競技終了.

最後の攻撃は,アクセスログから推測するに, slow request 的な攻撃を受けたっぽかった.
httpd はノーチューニングなのでどうしようもなかった.

反省点

  • あまりチームの連携がうまくとれてなかった
  • 最後まで port forward をやらなかったので運用しているページを見たことがなかった
  • ftp はまりすぎ

色々ありそうだけど,パっと思いついたのはこんな感じ.

感想

思った以上に時間は早く過ぎていって,もっと色々やりたかったな,というところがあった.
とはいえ,こういう競技に参加するのは初めてだったので非常に新鮮でかつ楽しめた.
攻撃に晒されるというのは,大変だった.

今回はとっかかりを掴めば,
結構対策できたのでそういったところはうまく立ち回れたのかな?(だったらいいな)

ただし ftp 周りはさっぱりわからんかったのでよろしくない….反省.

普段の業務では守る側,というほどではない(社内からしかアクセスできないツールしか作ってない)ので,
CTF とは違った楽しみがありつつも,守る側が一番大変ということを実感できた.

本家の8時間のほうも参加できるならしてみたいな,と思いました.

おまけ(追記)

チームメンバーの方が書かれた writeup では,
この writeup の足りない部分(システム構成や動作させている Web サイトなど)が書かれています.

kanpapa.com

ESXi on NUC + NAS で自宅サーバ構築

概要

何かやるときは EC2 でインスタンス立ち上げて…,
とかやっていたのだけれども,面倒くさい.
それに,自宅に共有ファイルサーバくらいは欲しい.
それならいっその事,自宅サーバ構築するか,という機運が高まり構築.
電気代はアウトソーシング(実家に)できないので,
可能な限り消費電力を下げることを目的に頑張る,というかそれを一番重視した.

NAS

色々悩んだのだけれども,アプライアンスに手を出してみた.
RAID 1 が組めれば良いし,そんな大容量を求めていないので,ReadyNAS RN10200 を調達.

HDD は HGST 信者なので HGST 0S03361 を2発購入.
RAID 1 を組むので利用可能なのは 4TB になるがそんなに使わないので問題無し.
初期不良は嫌なので, WinDFT を落としてきて,
ExtTest => Zero fill => ExtTest を念のため実行して問題がないことを確認.
1台あたり大体40時間くらいかかったような?

あとは RN10200 に2発とも挿して指示通りにセットアップしてあげるだけ.
注意点としては Firmware の 6.4.x 系が今のところ地雷だという噂.
自分のは 6.2.4 だったので 6.2.x 系の最新版にしてあるけど,今のところ特に問題は無し.

iPhone からも FileExplorer などを利用すると接続できた.

NUC

Intel NUC はどうやら ESXi のドライバなどが非公式だが揃っているようなので選択.
今回は, NUC5i5RYH を購入.
別に 2.5-inch ベイは必要なかったのだけれど,ベイがあるほうが安かったので….

メモリは 1.35V の定電圧のものが投げ売りされていたので 8GB * 2本を購入.
本当はもっとメモリ積みたいのだけど NUC の限界なので諦め.

ストレージは NAS を mount して VM などのファイルを保存してあげれば大きいものはいらない.
ESXi はとても軽量なので,家に転がっていた適当な USB メモリにインストールする.
初回インストール用の boot もこの USB でやるので一石二鳥(?).

組むのはメモリ挿すだけなので一瞬.
boot 用の USB メモリに Memtest86+ を入れて念のため回しておく.
f:id:yharima:20160221152127j:plain

インストール

以下の通りにやったらできた.
ESXi 6.0 Image for Intel NUC | Virten.net f:id:yharima:20160221155247j:plain ここまできたら IP アドレスを設定してあげるくらい.
残りは vSphere Client 経由で色々することになる.

感想

思ったよりは簡単に構築できた.
NAS + HDD が 5万円程度, NUC + メモリが 6万円程度なのでそれなりにかかった.
物理的な大きさは以下のような感じ.
f:id:yharima:20160221155751j:plain (写真には NAS と NUC 以外にも ルータと ONU も写り込んでいる)

ルータと NAS と NUC は UPS に繋いでいて,
UPS 計測によると平均 25W 程度で推移している模様.
大体これは月額400円少しくらいらしい.
年間だと5000円ちょっとでなかなか悩ましい出費かも….
(電気代の大部分は HDD が占めているのでどうしようもなさそう.)
ただ,色々遊べるので良いかなと.

場阿忍愚CTF writeup

同期の間で流行り出して参加.
結果は, 22位で4648点でした.もう少し解きたかった….
しかし最高に楽しかった.参加してからの2ヶ月はほとんど問題のことばっかり考えていた気がする.
色々なジャンルに触れ,ツールなども学べたので良い経験になったと思う.

練習

image level 1

画像を全部開いてタブで移動しながら読んだ.

芸術

ワットイズディス?

ヒントに「大和セキュリティ勉強会のステッカー」って書いてあったので,
よく見てみると確かにそう読めた.

cole nanee?

画像検索にかけると,どうやら運営っぽい人たちの Twitter アイコンに使われているようだ.
このやたら忍者推しで漢字1文字,かつ形から推測した.

Lines and Boxes

とても苦しんだ.
ヒントから漢字じゃなさそうまでは予想.アルファベット? どうも右の文字は PLAY と読めなくもない.
それから左の文字が全然わからないで詰み状態.
本当に無理やり読んでみると「山」以外は oRd なように読める.
ordplay で検索するとサジェストされた.

Why want something more?

画像検索にかけるとどうやら Asian art museum に該当文字の茶掛け?があるらしい.
書いたと思われる人が Shozo Sato という人だとわかる.
この名前で検索すると 「Shodo: The Quiet Art of Japanese Zen Calligraphy; Learn the Wisdom of Zen Through Traditional Brush Painting」 なる本を出版しているのがわかる.中身検索で見ても見つからず詰み.
本タイトルで漂っているとなんか youtube に順番にページをめくっていくだけの謎の動画があり,その中に書いてあった.

毎日使う

気合で草書を読む.
日本インターネット書道協会なるサイトに草書の早覚え法というページがあって,
偏を見ていると,「うかんむり?」か「きがまえ?」にみえる.
適当に偏から漢字を検索できるサイトでそれっぽい漢字を入れていった.

二進術

壱萬回

最初はずっと外部プログラムから叩いて自動回答していくのかと思ったが,どうもうまくいかず…   バイナリ読んでみると, FLAG を出す関数が丸々見えている.16進数から頑張って変換する.

DxLib遊戯如何様

起動するとなんかオセロが始まる.
適当に勝利回数弄ればいいの?と思って「スペシャねこまんま57号」を使い,
勝利回数を検索してメモリを弄り,65535にするとフラグが出てきた.

Unity遊戯如何様

ヒントにあることをそのままやる.
なんか「its_3D_Game_Tutorial」っぽいことがわかる.
でもそのまま入れてもダメ.謎い….
画面に表示されるタイミングで小文字に変換されたりするんだろうか?
と思って添付されているゲームの画像をよく見ると,
ソースでは Coins で渡しているのに画像では COINS と大文字になってる.
なるほど,大文字に変換されていた.

解読術

image level 5

解凍して ls するとタイムスタンプが全部異なる.
タイムスタンプ順に画像を開くと,意味のある文字になった.

Ninjya Crypto

ヒントから「忍者 暗号」で検索するとそれっぽいのが出てくる.
解読すると,「やまといえば」と書いてある.そのまま入れてみたがダメ.
問題に「敵か仲間か? 証明して!」と書いてある.そういえば「山といえば川」的な.

Decrypt RSA

こんなでかそうな素数分解できなさそう.
素数で検索すると Wikipedia のページが出てきて p, q がわかる.
あとはそこから秘密鍵の pem 作って openssl のコマンド流せばいけた.

解析術

Doubtful Files

ヒントもさっぱりわからない.
全部の画像適当に開くと「7.inf」はなぜか普通に開ける.
また,「8.vbs」はセキュリティ警告が出て起動できない.
起動できないエラーメッセージで検索していると ZoneID なるものがあるのがわかった.
ZoneID を確認するには notepad <FILE_PATH>:Zone.Identifier とすると確認できることがわかった.
「7.inf」と「8.vbs」を開くとなんか base64 っぽい文字があるので連結してデコード.

情報漏洩

なんかやたらでかいパケットをみると PNG っぽいヘッダがみえる.
3つあるので連結して png にするとあっさり開けた.

Speech by google translate

どうも切れてるように思える.ヒントに長く聞くには?的なことがあったので, 適当にヘッダを弄ってチャンクの長さ?部分を ff で埋め尽くしてきくと全部聞けた.

電網術

ftp is not secure.

Wireshark で開くと FTP-DATA が飛んでる部分がある.
TCP STREAM として追って dump した ASCII を適当に眺めるといかにも base64 っぽい文字があった.
あとはデコードしてあげた.

ベーシック

なんか http://burning.nsc.gr.jp にアクセスしてるのでアクセスしてみると認証が.
よくよく考えると http がユーザで //burning.nsc.gr.jp がパスワードであることに気づく.
ログインしたらフラグが書いてあった.

Japanese kids are knowing

適当に nmap でフルスキャンしてみると open なところが. nc で順番につなぐと C, D, ... 的な文字がでてきた.
さっぱりわからなかったので適当に現れる文字 ACDEFG で検索してみるとどうやら音楽記号らしい?
演奏してくれるサイトに順番に入れて再生してみたらかえるの歌っぽいので frog を md5 にかける(改行されないように気をつける).

諜報術

KDL

internet Archive で戻ればわかった.

Mr. Nipps

FacebookTwitter から追跡する? と思い調べる.
Twitter をみてると instagram に該当の日付・時間に画像を上げていた.
HOOTERS の公式などから緯度経度を調べて入れてみるもダメ.
全然わからなかったけど,ヒントをずっと見ていると,永 = A, 日° = P, 愛 = I だ! と気づく.
最初は google mapsAPI とか調べてたけど,よく考えたら instagramAPI じゃない?
と思ってやってみた.新しいバージョンの API だとダメで心が折れそうになった.
よくよく公式ドキュメントを見てみると,古い API がまだ使えることがわかった.
公式ドキュメントの API Console のリンクから飛んで認証通して media の API 叩いたら緯度経度が取得できた.
あとは,桁数に気をつけて入力.

Akiko-chan

画像検索して wordpress な URL を探した.

タナカハック

ヒントの通り, www.yamatosecurity.com のファイルを wget して grep したら出てきた.

タイムトラベル

DNS 50.115.13.104」で検索して片っ端から開いていくと ninja みたいなドメインが出てきた.
いかにもそれっぽいので入れてみたら答えだった.

記述術

search_duplicate_character_string

最長共通部分文字列(LCS) っぽい. なんかそのあたりのワードで検索していたら ruby のコードがあったので,
そいつに入力丸々流したらあっさり答えが出た.

JavaScript Puzzle

alert の部分はちゃんとアスキーコード表をみて入れる.
あとは,なんかそれっぽい感じになるように並べ替えただけ.

Count Number Of Flag's SubString!

curl で全探索気味に投げつけていった.

解凍?

file して圧縮形式を調べて順番に解凍していった.
何回も解凍しないとダメそうだったので, file した結果でコマンドを分岐するスクリプト書いて流した.

Make sorted Amida kuji!!

1問目は手動でポチポチやったら解けた.
2問目が問題で,全探索するのはどう考えても無理ゲー.
まずは,各行において有効となる順列をすべて生成する.
それで1, 2, 3, 4, 5行目だけ有効な順列をすべて試して,残りの行は最終的な順列に近くなるなら順番に交換していく,
という,部分全探索 + 貪欲の組み合わせでやったが,62個もでず. これは有効な順列で全探索する行を5ときめて(これ以上は探索空間的にきつい),
その行を全探索する({1,2,3,4,5},{1,2,3,4,6}, ... })というクソみたいな小手先技を使ったら,
ピッタリ62個でた.あとは全部ファイルに出力して順番にクリックボードに送りつけて62回 web から投稿した.

超文書転送術

GIFアニメ生成サイト

適当に画像送りつけて,返ってきた画像を色々調べてみてもわからず.
DOM を弄って怪しいことしてもさっぱり.
色々諦めて,上がっている画像があやしい?とおもって1の画像を開くと 403 が返ってきた.
これは怪しいと思って,そういえば自分で画像を作った時はなんかパスが違うだったなー,と思い,
そのパスで画像を表示してみるとなんか gif が出てきたので DL して preview で開いたらフラグがあった.

Network Tools

ページをみてみるとなんか bash のバージョン書いてある.
そういえば前に出た CTF で shellshock の問題があったなー,とおもって
適当に ls するものを埋め込んで ps とか実行してみたら flag のファイルがあったので cat した.

箱庭XSS

入力値が全部大文字になる,ということは色々入力しているとわかった.
html タグは大文字になっても有効だけど,js はダメ….
そういえば前に記号だけで js を書くとかいうネタをみたことがあったので,
調べてみて,その通りに alert を出すコードを書いたらフラグが出た.

YamaToDo

文字コードが指定できるので 5C 問題的な何かかな? と思うも sjis はブロックされている.
mysql に set できる文字コードで同じような問題が起きるものはないか? と思って調べていると,
big5 というのも起きるらしく「功」が該当文字であることがわかった.
あとはうまく SQL 文を組み立てて,最初のレコードを insert してみるもうまくいかず.
さらに調べてみると insert しているテーブルに副問い合わせする場合は,
as を使ってテーブルに別名をつけてあげないとうまく動かないらしい.
別名をつけてあげるとなんか文字化けしたレコードが追加された.
ここから全然わからなかったのだけど,ふとしたタイミングで間違って文字コードeuc-jp にしたらフラグになった.
すごい偶然だった.

箱庭XSS2

何も考えずに 箱庭XSS で使ったコード突っ込んだらフラグが出た.

兵法術

将棋詰め壱

将棋のサイトを見ながら頑張った.

将棋詰め弐

右上の座標の漢字が入れ替わってることに注意してやった.

将棋詰め参

頑張る

将棋詰め四

同上,ソルバでも書いたほうが良かったかも,というくらいには時間かかった.

移転

前のやつは大量に古いものもあってアレなので,
新しくアカウントごと作り直してみた.
いつものアカウント名がとれなかったのは残念….

最近は CTF にどっぷりなので write-up とか書いていきたい.