Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】7日間でハッキングを始める本を読んで理解した攻撃とその防御方法

2025年09月24日に「Qiita」が公開したITニュース「7日間でハッキングを始める本を読んで理解した攻撃とその防御方法」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

「7日間でハッキングをはじめる本」を参考に、ハッキングの攻撃種類と防御方法を解説する。Webアプリケーションの脆弱性や攻撃手法、具体的な対策を通して、システムエンジニアに必要なセキュリティ意識を高めるための基礎知識をまとめた内容だ。

ITニュース解説

システムエンジニアを目指す皆さんにとって、サイバーセキュリティは避けて通れない重要なテーマだ。インターネットが社会のインフラとなった現代において、システムがサイバー攻撃の脅威に常にさらされていることを理解し、その防御策を身につけることは、安全なシステムを構築・運用するために不可欠である。この記事では、ハッキングの基本的な攻撃手法とその防御策について、具体的な例を交えながら解説していく。これにより、皆さんのセキュリティ意識を高め、将来エンジニアとして活躍する上で役立つ知識を身につける手助けとなることを目指す。

まず、ハッキングとは、コンピュータシステムやネットワークに不正に侵入したり、情報を盗んだり、改ざんしたりする行為全般を指す。攻撃者はシステムの弱点、つまり「脆弱性」を狙って侵入を試みる。私たちがシステムを設計・開発する際には、このような脆弱性を生まないこと、そして万が一脆弱性が見つかった場合の対策を講じることが重要となる。

代表的な攻撃手法の一つに「パスワードアタック」がある。これは、文字通りパスワードを様々な方法で推測し、システムに不正ログインを試みる攻撃だ。例えば、考えられる全てのパスワードの組み合わせを試す「ブルートフォース攻撃」や、よく使われる単語やフレーズを辞書のように用いて試す「辞書攻撃」などがある。これに対する防御策は、複雑で推測されにくいパスワードを設定すること、複数の認証要素を組み合わせる「多要素認証(MFA)」を導入すること、そして一定回数ログインに失敗したらアカウントをロックする仕組みを設けることなどが挙げられる。

次に、Webアプリケーションを狙った攻撃について見ていこう。「SQLインジェクション」は、Webサイトの入力フォームなどに不正なSQL文(データベースを操作するための命令文)を挿入し、データベースから情報を不正に取得したり、改ざんしたりする攻撃だ。この攻撃を防ぐためには、入力された値を直接SQL文に組み込むのではなく、「プリペアドステートメント」や「パラメータ化クエリ」といった方法を用いて、入力値とSQL文を明確に区別して処理することが必須だ。また、入力されたデータが意図しない文字を含んでいないかを確認する「入力値検証」も重要となる。

「クロスサイトスクリプティング(XSS)」もWebアプリケーションの脆弱性を狙った攻撃だ。これは、Webサイトの入力フォームなどを通じて、悪意のあるスクリプト(プログラムコード)をウェブページに埋め込み、そのページを閲覧したユーザーのブラウザでスクリプトを実行させることで、個人情報を盗んだり、セッションを乗っ取ったりする。防御策としては、ユーザーが入力したデータを画面に表示する際に、スクリプトとして実行されないよう特殊文字を別の文字に置き換える「エスケープ処理」を行うこと、そして「コンテンツセキュリティポリシー(CSP)」を設定して、どのドメインからのスクリプト実行を許可するかを制限することなどが有効である。

「クロスサイトリクエストフォージェリ(CSRF)」は、ユーザーがログイン済みのWebサイトに対し、ユーザーの意図しない操作(商品の購入やパスワード変更など)を強制的に実行させる攻撃だ。攻撃者は、ユーザーをだまして悪意のあるリンクをクリックさせたり、不正なWebページを閲覧させたりする。この攻撃への対策としては、ユーザーからのリクエストが正規の画面から送信されたものかを確認するために「CSRFトークン」という使い捨ての文字列を埋め込み、サーバー側で検証する方法が一般的だ。また、Cookieの送信元を制限する「SameSite属性」を設定することも有効である。

サーバーのファイルシステムを狙う攻撃もある。「ディレクトリトラバーサル」は、Webサーバー上の公開領域ではないファイルやディレクトリに不正にアクセスし、機密情報を閲覧したり、改ざんしたりする攻撃だ。これは、例えば「../../」のような特殊な文字を組み込んだファイルパスを入力値として利用することで発生する。防御策としては、ユーザーからの入力値に「..」などの特定の文字列が含まれていないかを厳しくチェックする「入力値検証」と、ウェブサーバーがアクセスできるディレクトリを制限し、最低限の権限のみを与える「最小権限の原則」を徹底することが重要となる。

また、「ファイルアップロード攻撃」は、Webサイトのファイルアップロード機能を利用して、悪意のあるプログラムファイルをサーバーにアップロードし、そのファイルをサーバー上で実行させることでシステムを乗っ取る攻撃だ。これを防ぐには、アップロードされるファイルの拡張子を厳しく制限し、実行可能なファイル(.php, .exeなど)は許可しないこと、アップロードされたファイルをウイルススキャンにかけること、そしてアップロード先のディレクトリにはプログラムを実行する権限を与えないことなどが重要である。

サーバー上で任意のOSコマンドを実行させる「コマンドインジェクション」という攻撃もある。これは、WebアプリケーションがOSのコマンドを実行する際に、ユーザーからの入力値を適切に処理しない場合に発生し、攻撃者はサーバーを完全に制御できるようになる。この対策も「入力値検証」が中心となり、シェル(OSのコマンドを解釈・実行するプログラム)に渡す引数を厳しくチェックし、危険な文字が含まれていないかを確認することが不可欠だ。

ユーザーのセッション(ログイン状態などの情報)を乗っ取る「セッションハイジャック」も深刻な脅威だ。これは、ユーザーとサーバー間の通信を傍受したり、セッションID(ユーザーを識別するための情報)を推測したりして、正規のユーザーになりすましてシステムを操作する。対策としては、通信全体を暗号化する「HTTPS」の利用を徹底すること、セッションIDを推測されにくい複雑なものにし、定期的に変更すること、そしてセッションIDを保存するCookieには「HttpOnly」や「Secure」といった属性を設定し、セキュリティを高めることが求められる。

最後に、ユーザーの心理的な弱みを突く攻撃として「フィッシング」がある。これは、金融機関や有名企業を装った偽のメールやWebサイトでユーザーを騙し、IDやパスワード、クレジットカード情報などを不正に取得しようとする詐欺行為だ。これに対する防御は、利用者が常に正規のサイトであることを確認する習慣をつけること、不審なメールのリンクはクリックしないこと、そしてWebサイト側は「ドメイン認証」などの仕組みを導入して正規性をアピールすることが挙げられる。また、「マルウェア」とは、ウイルス、ワーム、トロイの木馬などの悪意のあるソフトウェアの総称だ。これらはシステムに侵入し、データを破壊したり、情報を盗んだりする。防御策としては、信頼できるウイルス対策ソフトウェアを導入し常に最新の状態に保つこと、OSやアプリケーションを常に最新バージョンに更新し既知の脆弱性を解消すること、そして不審なファイルやメールの添付ファイルは安易に開かないといった基本的なセキュリティ意識が重要となる。

これらの個別の対策に加え、システム全体のセキュリティを高めるための共通的なアプローチも不可欠だ。定期的にシステムの脆弱性を診断し、発見された弱点を速やかに修正する「脆弱性診断」は非常に重要である。また、Webアプリケーションに対する様々な攻撃を検知・防御する「Webアプリケーションファイアウォール(WAF)」の導入も有効な手段となる。さらに、万が一の事態に備えて、定期的なデータバックアップを確実に実施し、災害や攻撃によってデータが失われた場合でも復旧できる体制を整えておく必要がある。そして、繰り返しになるが、システムを構成するOSや各種ソフトウェアは常に最新の状態に保ち、既知の脆弱性を放置しないことが基本中の基本だ。

システムエンジニアとして、私たちは攻撃手法と防御手法の両方を理解し、常に最新の脅威情報にアンテナを張る必要がある。セキュリティは、一度対策をすれば終わりというものではなく、継続的に改善し続けるべき課題だ。これらの知識を活かし、安全で信頼性の高いシステムを構築できるエンジニアを目指してほしい。

関連コンテンツ

関連IT用語