はじめに
本記事は「7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性」の内容から知ったハッキングの攻撃種類とその攻撃を防ぐ手段を調べて、セキュリティ意識を高めることが目的です。
対象読者: セキュリティ入門者、Webアプリ開発者
前提知識は本を読んで進めていく上では特になくても大丈夫だと思いますが、
以下の知識があればスムーズに進めていけると思います。
- Linuxコマンド
- VM環境
- openvpn
(余談)私の前提知識
Linux知識:raspberry pi 4でファイルサーバーやhttpsのwebサーバーを立てたことがある
VM環境:Hyper-VやVirutalBoxで仮想環境を作ったことがある
openvpn: raspberry pi 4で使えるようにしたことがある
学んだことの概要
- なぜハッキングを学ぶのか
- 攻撃者の視点を知り、そもそもセキュリティとはどういうものかを知る
- セキュリティを構築する上で気を付ける方向性に気が付ける
- 7日間の学習の流れ
- Day1: 環境構築(Kali Linuxの仮想環境、tryhackmeチュートリアル)
- Day2: マシンに侵入(辞書攻撃など)
- Day3: 脆弱性を利用して侵入(脆弱性(CVE),ハッシュ解析など)
- Day4: Webサーバーの脆弱性(SQLインジェクションなど)
- Day5: Webフォームから侵入(リバースシェル、権限昇格など)
- Day6: Active Directoryへ侵入(AS-REP Roasting攻撃、DCSync攻撃など)
- Day7: WordPressへ侵入(総まとめ)
- 得られた全体的な学び
- 攻撃手法を知ることで、なぜ防御が必要なのかが理解できました
- 致命的な脆弱性が無いか日々チェックが必要だと理解しました
攻撃の概要と防御の学び
気になった攻撃法ピックアップしてそれの防御法を列挙します
ポートスキャン(Day2~Day7)
ポートスキャンとは、ターゲットのマシンで通信可能なポートを調べることです。
これ自体に問題はないですが、自サーバーではなく外部へ行う場合攻撃の準備をしていると考えられます。
防御法
不要なポートを閉じる
正直、これをしておけば間違いない。ポートは必要最低限のみ開けるのが一番
ファイアウォールやIDS/IPSを導入
アクセスを遮断する方向性。併用推奨。
ファイアウォールは通信を許可・拒否設定を行います。
IDS/IPSはパケットの中身を確認、攻撃と疑われるアクセスがある場合は遮断ができます。
WAFの導入
Webサーバーに特化したファイアウォール、特化しているため防御の精度はファイアウォールやIDS/IPSよりも高い
Web関係ならこちらも併用することが推奨されてます。
辞書攻撃(Day2など)
一般的な単語のリスト(辞書)に登録される単語をパスワード候補として、総当たりログインを行う攻撃です。
password
, 123456
, qwerty
のような弱いパスワードが狙われやすいです。
防御法
パスワードを強力にする
昨今、口酸っぱく言われているパスワードを強力にする方法です。
英字の大小と数字、記号を組み合わせて最低でも12桁程度のパスワードを設定して安易に突破されないようにします。
多要素認証
強力なパスワードだけでは不十分なのでこちらも併せて使いたいです。
ワンタイムパスワードや認証アプリを組み合わせることでパスワードを突破されてもログインできないようにします。
アカウントロック
複数回のパスワードエラーっが発生した際にアカウントを一時的にロックすることで辞書攻撃を強制的に打ち切る方法です。
こちらを行う場合は、ログイン画面にロックされることを明示しておく必要が有ります。
共通脆弱性識別子の悪用(Day3など)
共通脆弱性識別子(CVE)とは、公開されているセキュリティの欠陥(脆弱性)をリスト化したものです。
それぞれに固有の名前とIDを割り振られています。公開されているため放置すると攻撃に悪用されます。
防御法
最新化
OSやフレームワークの定期的なアップデートを行う方法です。
特にCVSSスコアが7.0以上の場合は優先的に対応する必要が有ります。
この手の問題は最新化しなければ解決しないので、情報収集を怠らないことが重要と思います。
SQLインジェクション(Day4)
データベースへの命令文を含むリクエストを送ることで、SQLインジェクションの脆弱性がある場合に
データベースの不正利用を行う攻撃です。
防御法
プレースホルダで組み立てる
SQL文のひな型に変数を示す記号(プレースホルダ)を置く方法です。
この場合、直接送られたデータを入れないので命令文ではなくデータとして処理されるので安全です。
エスケープ処理
特定の文字や記号を安全な形に変換する方法です。
SQL文で独別な意味があるシングルクォートやダブルクォートを変更することで攻撃の無効化ができます。
アカウントに適切な権限を付与する
データベースへの権限が必要以上に高い場合は、被害拡大の恐れがある為適切な権限を与えたいです。
SUIDの設定不備を突いた権限昇格(Day5)
SUID(set User ID)とは、権限の一つで「誰がファイルを実行してもセットされたユーザーで実行する」というものです。
所有者がrootであれば、そのファイルは誰が実行してもrootが実行したことになります。
防御法
不要なSUIDを削除
不必要なSUIDバイナリは外しておきましょう。
SUIDを全システムから消しておいてもよいと思います
SUIDを使わない
原則として使わない方が安全だと思います。
足りない権限があればsudoで必要分だけ付与する方が安心できます。
防御法を調べて思ったこと
「無駄や不要な個所を削ることで攻撃対象を縮小する」は手っ取り早い方法ではありますが、それでも個別の対策が必須になる物もあるはずです。
継続したセキュリティのチェックが必用になりますが、全てのチェックとなると途方もないです。
そうなると大事なのはAWSなどのマネージドサービスを活用することで、自身で守るべき範囲を減らし負担を軽くすることも考慮すべきだと思いました。
業務でも防御法を意識してコーディングなどを気を付けたいですね。
本全体を通して学んだこと
セキュリティは無くてはならないものだとは理解していましたが、名称を知らないと調べるのも一苦労なので攻撃法を知れたことによって明確になり具体的な防御策を調べることができました。
当然ですが、脆弱性は日々出てきますので情報の最新化も怠らずにすること(情報収集が簡単にできる環境作り)が大切ですね。
せっかくハッキングのことを学んだので、TryHackmeでもう少し勉強してみようと思います。