見出し画像

書籍紹介「サイバー攻撃 ネット世界の裏側で起きていること」

記事を読んでいただきありがとうございます。今回は書籍紹介ということで「サイバー攻撃 ネット世界の裏側で起きていること(中島明日香著)」について紹介していきます。


この書籍の概要と学べること

  この書籍はサイバー攻撃の裏側をIT知識のない人にもわかりやすく説明しています。プログラミングやWebサイト、そしてデータ管理の基礎知識も説明してくれているのでサイバーセキュリティだけでなくIT全般の勉強にもなります。サイバー攻撃に関しては脆弱性を利用した攻撃にフォーカスを当て議論しています。脆弱性の定義、脆弱性の管理体制と開発者と攻撃者の攻防などリアルな視点も交えながら書かれているので読みやすいです。また、バッファーオーバーフローや書式指定文字列、クロスサイトスクリプティング、SQLインジェクションの脆弱性を利用して攻撃がどのように行われるのか、簡単な実例とともに説明されており非常にわかりやすくなっています。私でもSQLインジェクション出来そう、、、と思ってしまうほどでした。最後のまとめとしてサイバー攻撃が今ではビジネスに発展しているということ、そして第5の戦場として考えられていることなどが述べられています。

おすすめしたい人

  • サイバーセキュリティに興味があるけどIT関連の知識があまりない人

  • 脆弱性についての理解を深めたい人

書籍紹介の流れ

要約と感想を各章ごとに書いています。書ききれないより詳しい内容については各章のリンク先の記事に書こうと思います。

※本文を引用している文章についてはこのように記載してあります

本文より


第1章 サイバー攻撃で悪用される「脆弱性」とは何か

  この章ではソフトウェアの脆弱性の脆弱性に焦点を当て、具体例を交えながら初学者にもわかりやすく説明しています。本書での脆弱性の定義は

欠陥の中で特に第三者が悪用可能なもの

サイバー攻撃 ネット世界の裏側で起きていること

と定義されています。IT機器やそれを制御するソフトウェアは人の手によって作られている限り何かしらの欠陥を持っていると考えられ、その欠陥が攻撃に悪用可能な場合「脆弱性」と呼ばれるわけです。脆弱性を悪用されると様々なことができてしまいます。変な画像を画面に表示させるなどの悪戯程度ならまだいいですが、脆弱性を利用し個人情報を盗んだり人の命を奪うことも可能です。最新の車などを考えてみるとその怖さがわかると思います。最近ではスマートフォンでキーを開けたりエンジンを作動させたりできるものも増えています。そんな車が何者かにハッキングされたらどうでしょうか?急に車が動き出し誰かの命を奪ってしまうかもしれません。そんなことはSFの世界だと思う方もいると思いますが、実際に車メーカーのクライスラーが自身の車の脆弱性を発見しそれを利用すれば車のエンジンやブレーキ機能を遠隔操作できることを確認しました。その車種はリコールされ、事故も起きていませんが現実に起きてしまっていた可能性も大いにあります。このような具体的事例についても本書で紹介されています。
  では、このような脆弱性はいつ生まれるのでしょうか。本書では様々な原因の中から代表的なものである「開発工程上の問題」をピックアップして説明しています。加えて、脆弱性を作り込まないためにはどうしたらいいのか、マイクロソフト社が提唱した「セキュリティ開発ライフサイクル」を例に挙げ簡単に説明しています。

第2章 サイバー攻撃は防げるか

  この章は脆弱性を利用したサイバー攻撃の被害を防ぐためにどのような対策が講じられているのかについて説明しています。具体的には脆弱性情報データベースと脆弱性発見から修正までの攻防について筆者の実体験も交えながら書かれています。

  脆弱性情報データベースとは報告された脆弱性に番号をつけ管理し、脆弱性の内容や影響範囲など技術的な情報をまとめているものです。主なデータベースにはCVE(Common Vulnerbilities and Exposures)というものやJVN iPediaがあります。脆弱性情報の管理体制のあり方については様々な議論がなされており、どうすれば攻撃者に有利な情報を与えずに開発企業に脆弱性の修正を促すことができるのかを考え最適な方法が模索され現在の体制になっています。この議論の流れも具体的に本書で説明されていました。

  脆弱性の発見から修正までの攻防を二つのパターンに分けて説明しています。

パターン1:善意のものが未知の脆弱性を発見し、悪用前にパッチが配信される
パターン2:攻撃者が未知の脆弱性を発見・悪用した後にパッチが配信される

サイバー攻撃 ネット世界の裏側で起きていること

パターン1では脆弱性が悪用される前に開発者などの善意の第三者が脆弱性を発見しパッチ(修正用プログラム)が配信されるので、ユーザーがパッチを適用すれば何も問題はないと感じるかもしれませんが、それほど単純ではありません。パッチは攻撃者の武器にもなるのです。パッチ後とパッチ前のプログラムの差分を取ればどの脆弱性に対するパッチかがわかり、その脆弱性を攻撃するツールを作成することができてしまいます。ユーザー数の多いアプリなどではパッチが公表されてから実際にユーザーがパッチを適用する前にタイムラグが生じ、攻撃者はそれを狙って攻撃します。そのため、パッチが公表されたらなるべく早く適用する必要があります。
  パターン2では膨大な被害が出ることがあります。この脆弱性は開発者でも認知していないものなので、それを狙った攻撃を防ぐのは非常に難しいからです。脆弱性が公表されると開発者がパッチを作りますが、パッチが適用されるまでにもタイムラグが生じます。攻撃者が脆弱性を発見してからパッチが配信されるまでの期間をゼロデイ期間と呼びこの期間に行われる攻撃をゼロデイ攻撃と呼びます。
このように脆弱性を利用した攻撃は防ぐことが非常に難しいということがわかります。

第3章 プログラムの制御は以下にして乗っ取られるか

  この章ではソフトウェアの開発から基本までを解説した後、脆弱性の一例であるバッファオーバーフローが生まれる原因やそれを利用した攻撃手法について説明しています。基本的なプログラミングの解説やメモリ構造なども解説されており、プログラミングをやったことのない人にも分かりやすい内容になっています。
バッファオーバーフローの脆弱性はコンピュータのメモリ上で確保された領域に対してそれを上回る量のデータを書きこめてしまうことに起因します。コンピュータにはソフトウェアが利用するための作業領域としてメモリが割り当てられており、そのメモリに対して許容量以上の情報を書き込むことでソフトウェアの処理を強制的に終わらせたり悪意のあるファイルを実行させたりできてしまいます。本書では、スタックオーバーフローを例に取り、実際のソースコードとともに「なぜバッファオバーフローが起き、攻撃に悪用されるのか」をわかりやすく説明しています。
具体的な内容はこちらにまとめてあります。☟


第4章 文字列の整形機能は以下にして攻撃に悪用されるか

  この章ではバッファオーバーフローと同様にプログラムの不備から生まれる脆弱性である書式指定文字列の脆弱性について実際のコードを使いながら説明しています。書式指定文字列とは、どのような形成期の文字列としてデータを出力・表示するか指定することができる文字列です。代表的なものにprintf関数があります。

printf("year is = %d ¥n", year)

上のソースコードのようなものを言います。%dの部分でどんな書式で文字列を表示するのか決めています。(%dは整数値として表示しますよという意味)書式指定文字列の脆弱性とは、このような書式指定文字列を利用する関数(printfなど)に対して使用する書式指定文字列が外部から指定可能な状態にあることに起因する脆弱性です。この脆弱性を悪用して任意のコードを実行する方法はいくつかありますが、書式指定文字列の機能であるダイレクトパラメータアクセスなどを利用しプログラム中に存在する特定の関数を呼び出すためのアドレスを悪意のある関数を呼び出す別のアドレスに書き換える方法があります。
こちらに関しても、ソースコードを用い具体的に説明がなされていました。長くなるのでこちらの記事で紹介します。☟


第5章 以下にしてWebサイトに悪意あるコードが埋め込まれるか

  この章では、Webサイトになぜ脆弱性が生まれてしまうのか、そしてその脆弱性がどのように悪用されるのかを説明しています。初学者にもわかりやすいように、Webサイトの歴史やHTMLやCSS、HTTP通信についてなど丁寧に説明してくれています。また、脆弱性としてクロスサイト・スクリプティングを例に取り、なぜこの脆弱性が生まれ悪用されてしまうのか説明しています。
クロスサイト・スクリプティング(XSS)とはWebサイトに存在する脆弱性の中で特に大きな割合を占めるものです。XSSはWebサイトの表示処理の不備に起因する脆弱性です。具体的にはユーザーからの入力をWebサイトが何も処理を行わずにブラウザ上に表示してしまうという脆弱性です。本書でXSSの危険性を、Web掲示板などを例に説明しています。例えば、Web掲示板のコメント欄にHTMLを入力した時を考えてみましょう。通常なら文字列として処理され出力されますが、XSSの脆弱性が存在していた場合、HTMLとして解釈されHTMLタグが反映されます。このようにWebアプリケーションにXSSの脆弱性が存在すると悪意のある閲覧者がHTMLやJavaScriptを自由に埋め込むことができてしまい、XSSの存在するWebサイトでは攻撃者はWebサイトの改ざんやなりすましなどを行えてしまいます。
本書ではXSSが悪用される様子が具体的に説明されていました。こちらの記事で紹介していこうと思います。☟


第6章 機密情報は以下にして盗まれるか

  この章ではWebに関連する脆弱性のうちXSSと並び代表的なSQLインジェクションについて説明しています。SQLインジェクションの脆弱性とは、データベースを管理するプログラムがユーザーの入力によって意図的に書き換えられることい起因する脆弱性です。
  SQLインジェクションを理解するため、代表的なデータベース管理システムであるMySQLを例に取りデータ管理の仕組みやSQL言語について簡単な説明を行ったのち、SQLインジェクションにより認証回避ができる仕組みやデータが奪える仕組みなどについて説明しています。
詳しい説明はこちらに書きます☟


第7章 脆弱性と社会

  最後の章では、サイバー攻撃が現在社会にどんな影響を与えているのか、そしてサイバー攻撃の形態がどのように変化しているのかについて議論されています。Exploit Kitを利用した金銭目的マルウェアの感染攻撃に焦点を当て現在のサイバー攻撃の状況を述べ、それらの対策として行われている脆弱性報奨金制度やCTFなどの取り組みについて議論しています。
この章についても詳しく述べたい箇所がたくさんありますのでこちらに書きます☟

感想

  この本を読んでみて、サイバー攻撃って本当に怖いなと思う反面、面白い世界だなと思いました。SQLインジェクションの脆弱性を利用してなぜ認証をすり抜けられるのかなど、こういうことができることは知っていたけれど実際どうやっているんだろう?という疑問が読む前はあったのですがそれらを全て解消してくれました。もちろん紹介されていた手法は基礎的なもので他にもたくさんあると思うのですが、サイバー攻撃を知るための第一歩を踏み出せたのかなと思います。
  また、特に印象に残ったのがサイバー攻撃が人の命を脅かすものになっているという指摘と、サイバー犯罪がビジネス化されているという指摘です。今ではスマート家電も身近になりこれからどんどんIoT製品が身近になるのは明白です。身近にあるIoT機器がサイバー攻撃に合ったらどうなるのか想像するととても怖いです。この流れに対処するためにはサイバーセキュリティによって守る範囲を大きくしていかなければならないと思いました。自宅のPCだけでなく自宅全体を、工場の機械だけでなく向上全体を、社員PCだけでなくオフィス全体を、といったように守る範囲を広げた総防御を施す必要があると思います。また、ビジネス化されたサイバー攻撃に対処するためには守る方もビジネス的に稼げる仕組みを作る必要があると思いました。本書で紹介されている脆弱性報奨金制度などです。しかしながら、守る側の仕組みは攻撃側よりも参入障壁が高いという課題があると思います。攻撃側では、誰かが用意した攻撃ようキットなどを購入すれば知識がなくても攻撃できますが、守る側は知識がないと脆弱性を探したりサイバー攻撃から身を守ったりできないという現状があります。守る側の参入障壁を低くするためには、脆弱性を発見するキットをより使いやすくしたり報告もスマホでできるようにするなど新たな取り組みが必要なのではないかと思いました。
  この本はサイバーセキュリティの裏側という普通の人には難しそうな内容をとてもわかりやすく解説してくれる本です。少しでも興味のある方はぜひ読んでみてください。

この記事が気に入ったらサポートをしてみませんか?