セキュリティ勉強会
第2回:設定値を考慮していないと、どうなるのか
2019/08/17 伊藤 雅幸
今日はみんなで
Linuxの設定が脆弱だと
どうなるか確認してみよう!
今回の内容も、攻撃手法の101
わかりやすさを重視して、やられ環境はものすごく脆弱
【脆弱っぷりを紹介】
・SE Linux無効
・ソフトウェアは古いバージョン
・ついでにOSも古いバージョン
・CentOSをminiでインストールしてるからFirewallなし
第1回との違い
攻撃対象:
Windows ⇒ Linux
第1回との違い
攻撃対象:
Windows ⇒ Linux
攻撃方法:
Metasploit ⇒ 色々w
第1回との違い
攻撃対象:
Windows ⇒ Linux
攻撃方法:
Metasploit ⇒ 色々w
モチベーション:
高め ⇒ 低め (他のことに興味の対象が移動・・・)
今日も
楽しんでいってください!
今日の手順
手順1:攻撃マシンの構築
手順2:やられマシンとの疎通を確認
手順3:やられマシンを攻撃する
・やられマシンでコマンドを実行してみよう
・権限を昇格してみよう
・アプリのCVEを検証してみよう
今日のネットワーク構成
※注意事項※
今回は、攻撃マシン、各自のPC、やられマシンが同セグメントにいます。
※各自のPCと攻撃マシンはブリッジ接続!
やられマシンのIPアドレスを間違えないように注意してください!!!
IPアドレスを間違えると各自のPCを攻撃することになるので、、、
お約束ですが、この知識を悪用することは厳禁です!
また自身が管理していない環境を攻撃することは法律で禁止されています!
やられマシンの設定メモ
適当に環境構築してて言われたから、とりあえず、
サクッと動けばいいだけだから、CentOSをminimalでインストールして
インストール作業を権限で止められたくないからSE Linuxはもちろん無効
追加インストールするサービスも初期設定で、別端末からアクセスできるぐらい
の確認でいいだろう。
流石にrootでsshはアレだから、rootでのsshだけ無効にしておくか、、、
使う人は、通常ユーザでsshログインしてsuしてもらえばいいし。
ソフトは指定されたjenkins、あとnginxで適当なwebサイトでも用意しておくか、
jenkinsの設定はとりあえず、ユーザ権限のjenkins1〜5を作っといて、
パスワードはとりあえずアカウント名と同じにして、あとは使う人が
パスワード変更とか権限付与してくれれば、いい感じかなー・・・・
手順1:攻撃マシンの構築
割愛w
詳しくは、第1回セキュリティ勉強会資料を参照
手順2:やられマシンとの疎通を確認
各マシンとの疎通確認
やること
・各攻撃マシンとやられマシン間でping確認
Kali Linuxからping確認するぞー
というわけで、Kali Linuxでコマンドを実行する
「ping_やられマシンのIPアドレス」(アンスコは半角スペース)
例:やられマシンのIPが192.168.56.103の場合
コマンドは、「ping 192.168.56.103」となる(終了は、Ctrl+C)
おめでとうございます!!!
これで準備万端です!!!
手順3:やられマシンを攻撃する
今回は、前回利用したrapid7社のMetasploitという攻撃ツールと、
スクリプトなどの脆弱性証明コードを利用して攻撃していきます!
今回攻撃できるものは、以下の3種類あるので順番に攻撃していきましょう!
・Jenkins
・Webサーバ
・CentOS
皆さん、早速ですが攻撃タイムです!
まずは、Jenkinsから攻撃しましょう!
まず、サーバの状態を確認しましょう。
ブラウザで、やられマシンの8080ポートに
アクセスして、ユーザ名、パスワードを
入力して接続してみよう!
ユーザ名:jenkins[1-5]
パスワード:jenkins[1-5]
攻撃のヒントを探そう!
攻撃できそうなポイントを探そう!
例えば
ユーザに、どんな権限があるのか
⇒初期画面では、ジョブの作成ができそうですね!
どのバージョンを利用しているのか
⇒画面の右下に、Jenkinsのバージョンが表示されていますね!
ヒントから脆弱性を探していこう!その1
ユーザ権限のjenkins[1-5]でジョブが実行できるってことは、
Jenkinsの権限でシェルが実行できるってことですね!!
ということは、Jenkins自体の設定ファイルの書き換えができそうですね!!!
Jenkinsのディレクトリ構造は以下なので、
jobの実行ディレクトリ: [JENKINS_ROOT]/workspace/[ジョブ名]/
Jenkinsの設定ファイル: [JENKINS_ROOT]/config.xml
※jobの実行ディレクトリから相対パスで、../../config.xml
このconfigファイルを編集したら、権限を突破できそうですね!!!
ジョブの作成!!!(1/2)
新規ジョブ作成を選択し、ジョブ作成画面に遷移します。
任意のジョブ名を入力し
「フリースタイル・プロジェクトのビルド」
を選択
ジョブの作成!!!(2/2)
ビルド - ビルド手順の追加からシェルの実行を選択!
シェルスクリプト欄に以下を入力!
保存する!!
勉強会限定
ビルドを実行する!!!
画面のビルドの実行から、作成したシェルを実行する。
青くなってればビルド成功⇒
ってことは設定ファイルが書き変わった!?
でも、、、何も起きないよ?
何も起きなくても大丈夫!!
勉強会限定
Jenkins再起動後
もう一度、Jenkinsにアクセスしてみてください。
おや?何やら画面がおかしいと思いませんか?
Jenkins再起動後
もう一度、Jenkinsにアクセスしてみてください。
おや?何やら画面がおかしいと思いませんか?
そもそも皆さん、ログインしましたか?
おめでとうございます!!!
ファイルの書き換えに成功しました!!
ヒントから脆弱性を探していこう!その2
なにやらJenkinsのバージョンが古いですねー
古いということは、脆弱です!!!
いいですか?
古い=脆弱
これを覚えて帰ってほしいw
該当のバージョンで脆弱性を探す!!
私、一生懸命探しました。
そして脆弱性を突くPoC(Proof of Concept:概念証明)コードを
見つけました!
ごめんなさい。
いい感じに脆弱性を突けませんでした!
🙇
※PoCコードの条件を満たしていないため、
実行しても影響がなかった
気を取り直して、Webサーバを攻撃しましょう!
では、サーバの状態を確認しましょう。
適当なWebサーバが起動しているので、
ブラウザで、やられマシンにアクセスします!
おめでとうございます!!!
伝説のStruts2を見つけました!!
言わずと知れたStruts2です!!!
これは、、、
捗りそうですね!!(何が?w
攻撃のヒントを探そう!
攻撃できそうなポイントを探そう!
もう、なんでも攻撃コードが通りそうですね!!
ググって適当な脆弱性を試してください!w
ノーヒントでもあれなので、Struts2のバージョンを載せておきます。
バージョン:2.3.12
とりあえずググろう!
バージョンが分かればこっちのものです!
該当のバージョンに含まれる脆弱性を探します。
Strutsなのでめちゃくちゃヒットしますね!!
というわけで、試してみてください!
意外と時間がかかるだろう?
PoC実現は時間がかかる!!!
該当のバージョンでググって、脆弱性を見つけても
検証に時間がかかりまくるのです!!
#これで私は、資料作成が遅くなりました!w
バージョンが分かっても、画面に入力欄が必要だったり、
サーバの設定値が関係するものだったりと、意外と考慮が必要。
そのためPoCを試す人たちは、あらかじめ脆弱になるような設定値を
埋め込んだDockerを利用したりします。
PoCを試してみよう!!!
今回のバージョンには、設定変更が不要な以下の脆弱性が含まれています。
Strutsのバージョン:2.3.12
CVE番号:CVE-2017-5638
脆弱性名称:S2-045
この内容を検索してみると、脆弱性がありそうな画面が見つかりますね!
まずは画面を確認してみる
勉強会限定
やってみる
勉強会限定
もっと効率よくPoCを試したい
勉強会限定
たとえば、、、
勉強会限定
おめでとうございます!!!
PoCコードを使いこなす
つよつよエンジニアの誕生です!!!
設定変更が必要なS2-057の脆弱性も
試したかったんですが、
脆弱性を突けませんでした!
🙇
※PoCコードの条件を満たしていないため、
実行しても影響がなかった
それでは本日最後、サーバOSを攻撃しよう!
いままでの脆弱性を利用して、まずはサーバOSとバージョンを調べよう!
Strutsの脆弱性を利用するとOSコマンドが実行出来ましたよね?
OSの確認コマンドは、なんでしたか?
以下のコマンドを実行すると、OSが分かりそうですね!
・cat /etc/os-release
・uname -a
・cat /etc/redhat-release
サーバの情報取得!
勉強会限定
とりあえずググろう!
バージョンが分かればこっちのものです!
該当のバージョンに含まれる脆弱性を探します。
頑張れ!!!
攻撃方法に正解はない!
勉強会限定
攻撃しよう!
勉強会限定
攻撃が成功すると
こんな感じになる
勉強会限定
おめでとうございます!!!
犯罪係数が300を超えました!!
まとめ
・前回と今回でWindowsとLinuxの攻撃の流れが理解できたと思う。
攻撃に対する認識が向上したことでしょう。
・バージョン指定でソフトウェアを利用していると時間経過とともに
脆弱性が顕現する恐れがある。
そんなの気にしないとか言ってても、攻撃されたら
「なんで対策してないんだ!!」ってキレられるので、
定期的にアップデートをすることが大切。
古い=堅牢ではなく、古い=脆弱です!
・次回は、badUSBを作るぞー!!
おしまい

第2回セキュリティ勉強会

Editor's Notes

  • #5 今回は、やられマシンがWindowsからLinuxに変わりました。 前回は色々できるようにFullバージョンのKali Linuxをインストールしてもらいましたが、 PCのスペックが必要ということで少し不評だったようなので、最小構成で攻撃するための環境構築をしていきます。 あと攻撃方法が色々変わります。 モチベーションが別のことに興味を持っちゃったので、そっちにとられている感じw
  • #6 今回は、やられマシンがWindowsからLinuxに変わりました。 前回は色々できるようにFullバージョンのKali Linuxをインストールしてもらいましたが、 PCのスペックが必要ということで少し不評だったようなので、最小構成で攻撃するための環境構築をしていきます。 あと攻撃方法が色々変わります。 モチベーションが別のことに興味を持っちゃったので、そっちにとられている感じw
  • #7 今回は、やられマシンがWindowsからLinuxに変わりました。 前回は色々できるようにFullバージョンのKali Linuxをインストールしてもらいましたが、 PCのスペックが必要ということで少し不評だったようなので、最小構成で攻撃するための環境構築をしていきます。 あと攻撃方法が色々変わります。 モチベーションが別のことに興味を持っちゃったので、そっちにとられている感じw
  • #9 今回の流れはこんな感じで、 攻撃環境を構築して、疎通して、攻撃です。 前回参加した人は流れがわかると思いますが、今回も一応環境構築もいれています
  • #10 今回のやられ環境のネットワーク構成も前回と同じで、やられマシン以外全員敵です。 WindowsからLinuxに変わったぐらいです。 第1回と第2回に参加していると、winとLinuxを攻撃できるので、攻撃の幅が広がりますよね!w
  • #11 ちょっと嫌いな人がいても絶対に攻撃しちゃダメですw
  • #12 めんどくさがり屋の某サマンサが構築したので、 こんな感じの設定になっています。 と、現場では、よくある感じのサーバが一つ立ちましたね。 今回は、このよくある環境がやられマシンです。 ワクワクしますよね?w ではそのワクワク感をひとまず置いといて、