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研修制度を聞いてみた CentOS7 開発環境構築 数字力 財務 IT人材 UI Machine Learning Go言語 (golang) データマイニング 統計学 新人教育 やり直し数学 RDB つながる工場 モチベーション WebSocket WebWorker HTML5 CSS3 Bootstrap 微分・積分 システム設計 決断力 LAMP環境 教育研修担当者向け ルーティング Linux入門 図解術 目標設定 試験対策 インタビュー技法 Vue.js ブロックチェーン DHCP 仕掛け学 BSC 財務諸表 自己分析 RIP スタティックルート バッファオーバーフロー DoS攻撃 システム開発 Wireshark パケットキャプチャ 管理職研修 部下育成 文章力 情報システム部門向け プロジェクトリーダー プロジェクトマネージャ 塗り絵 リスク管理 法改定 会社の仕組み Chainer AI人材 会話術 テスト技法 会社規模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 イーサリアム プロジェクト・メンバ 正規化 パケット実験 作業分解 トラブル調査 ネットワーク設計 Windows server 2016 ネットワーク機器 DX 管理職 最新動向 ポストコロナ時代 IoTデバイス マイコンボード センサ サーバー仮想化 仮想ルータ WAN インターネットVPN 若手エンジニア ITプロジェクト 人事面談 DX人材育成 Java基礎 ZAP 脆弱性診断 NWサービス構築 イノベーション・マネジメント ネットワークセキュリティ ストレッチ Google Cloud Platform 不動産業界 テレワーク(WFH) ドリル GCP ( Google Cloud Platform ) システム業界 PMS テレワーク ビッグデータ NoSQL OWASP CentOS8 ネットワーク技術 データ分析 デザインシンキング 保険業界 会議リーダー システムエンジニア 段取り術 プロジェクト原論 文章書き換え術 ノーコード No Code MongoDB Redis Cassandra 運用管理 Windows10 仮想マシン リモートワーク 働き方 生産性 IPSec Office セキュリティマナー ソフトウェア・レビュー ライフハック 新しい働き方 エクササイズ ビジネスモデルキャンバス 状況認識 ストレス 必須コマンド Web 今日わかる きほん 状況把握 意思決定 心の健康 IT書籍 書籍紹介 営業マン 類推法 クラス プロセス指向 PdM 共用 ウェビナーレポート 地方創生 GraphQL CSS OWASP ZAP セキュリティマネジメント 問題解決 ソフトウェア 新技術 雑談力 テスト見積もり Scala Go Rust Relay Cloud AI Kaggle ITエンジニア フレッシャーズ 経営戦略 事業戦略 マインドフルネス 基本情報技術者試験 ニューノーマル プロジェクト会議 メソドロジ 講師インタビュー システム障害 販売管理システム VMware セキュリティ事例 ケーススタディ インターネット通信 ビジネスマン 品質向上 提案 ロジック図解術 バーチャルマシン 対策事例 アスリート 国の動向 アンチパターン リモートアクセス 脳ヨガ 自律神経 整え方 組み立て方 コミュニケーション術 リーダー 新人 知っておきたいこと 対人能力 洞察力 一文作成 サッカー業界 グループワーク マネジメント手法 IT業界 Octave セキュリティ管理 IT ネットワーク機器の特徴 ネットワーク機器の仕組み 基本のキ プレゼンテーションの組み立て方 伝え力 試験合格後 時短術 作成のコツ 導入事例 メンタルマネジメント メンタルヘルスケア DXプロジェクト プログラミング教育 プログラミング的思考 子供向けプログラミング データ定義言語 DDL モダンWebアプリケーション ドキュメント作成 Docker Compose Docker Hub AR VBAエキスパート試験 Azure メディア掲載 サーバーアーキテクチャ データ操作言語 DML NewSQL ソフトウェアセキュリティ 数学 VR アパレル業界 Kubernetes Power BI Android プロダクトオーナーシップ プロダクトオーナー 内製化 情報システム部門 Z世代 クラウドネイティブ 技術教育 Windows server 2019 XSS CSRF クリックジャッキング ビジネスパーソン VPC IAM AWS Fargete ECS 問題発見力 問題分析力編 Access 流通業界 金融業界 ネットワーク設定 トラブル対応 評価 ソフトウェア品質 クレーム対応 呼吸法 戦国武将 エンジニアリング 組織論 SpreadSheet GAS ゼロトラスト Express 3D Arduino 業務分析法 業務構造 経営者 ストレングスファインダー 発注者視点 情報セキュリティ 顧客体験 エンターテインメント お笑い オンライン学習 オンライン教育 学校教育 情報化社会 スポーツ デジタル戦略 ITフェスティバル2022 GoogleSpreadSheet GoogleAppsScript(GAS) SQL 問題分析力 メタバース NFT 資産形成 資産運用 Typescript WebXR 講師が注目する技術 プラクティス ローコード ホワイトハッカーに学ぶ Google Cloud LinuC レイヤ3スイッチ ホワイトハッカー ハッキング 脆弱性 ビジネススキル キャリア戦略 NFTアート リテンションマネジメント ゲーム制作 トラブル防止 システム外注 食事メソッド コード ソフトウェア設計 ドメイン駆動設計 人事評価制度 報告書 稟議書 契約書 Rails 業務自動化

Web セキュリティを体系的に学ぶ ~原理原則と攻撃方法と対策~|研修コースに参加してみた


2021-11-15 更新

今回参加したコースは Web セキュリティを体系的に学ぶ ~原理原則と攻撃方法と対策~ です。

「 SNS アカウントが乗っ取られた」「クレジットカードが不正使用された」「登録していた個人情報が漏れてしまった」、このような体験したことはありませんか? 私はすべてあります … 。なお、幸い仕事ではなく、すべてプライベートだったので会社員ができています。

そういった身近で感じることが増えた Web セキュリティですが、とにかく広大で、また幾層にも渡った知識が必要とされる、とても深い世界です。こういった世界に入門するのにガイドとなるコースで、体系的に原理原則と攻撃 / 対策を学べました。なお、このコースでは 1 つのテーマで、まず問題編で基礎を学び、解決編で対策方法を学ぶという構成になっています。

 

また、このレポートはいつもの講座 / リアルタイム配信のコースではなく、動画契約企業がいつでも視聴できる「いつでも動画」に収録されている、「 Web サイトにおける危険性と対策 」「 Web サイトを狙ったサイバー攻撃事例 」の 2 コースをまとめたものです。それぞれ 1 時間程度で、 1 トピック 15 分程度に分けられているため、スキマで学習できました。

 

では、どのような内容だったのか、レポートします!

コース情報

想定している受講者 特になし
受講目標
  • Web を取り巻く危険とその対策方法を理解する
  • サイバー攻撃事例に関する用語を理解できる
  • それぞれの攻撃に対する注意点や対策が理解できる

講師紹介

このコースで登壇されたのは、セキュリティの専門家として登壇が多い 村上 博 さんです。

講師インタビュー 村上 博
「現場の実例で受講者の脳を刺激する」

Web における脅威と対策

まずは 1 つめのコースです。はじめてセキュリティを学ぶという広い方々に向けて Web における脅威の全般を 1 時間程度で解説いただきました。

Web の脅威と認証

Web の脅威

Web の危険性には、次のような種類があります。

マルウェア感染
悪意のある不正プログラム
改ざん
情報を不正に変更する
漏えい
情報を第三者へ伝える
破壊
情報を破壊、復元不能にする
盗聴
情報を読み取り、詐取すること
なりすまし
正当な利用者に偽装する
サービス停止
システムが利用不能になる
不正アクセス
利用者になりすまして、システムやサービスにアクセスする
詐欺
他人を騙して金品や情報を奪い、損害を与える

特に重要なのが不正アクセスです。仮に不正アクセスが可能であれば、ほかのあらゆる不正が可能になってしまいます。確かに使っている EC サイトの自分のアカウントが乗っ取られたら … 、ゾッとしますね。

認証の原理原則

なりすましによる不正アクセスに対しては、認証技術が重要です。そこで必要になるのが、セキュリティ 3 要素です。

セキュリティ 3 要素

機密性
本人だけが利用できること
完全性
処理方法やデータが間違いないこと
可用性
本人だけはいつでも利用できること

3 要素に付随して、よく出てくる用語

真正性
利用者を正当であると確認すること
職責
職務上の責任のこと。管理者や承認者は権限だけでなく責任を持つ

セキュリティ認証の対象は、本人認証以外にも次のようなものがあります。

人間(本人認証)
自分が第三者に対して本人であると証明する
メッセージ(メッセージ認証)
メッセージが正当(真正)であると証明する
時刻(タイムスタンプ認証)
時刻が正確であると証明する

まるでミステリーで出てくるアリバイ工作のようですが、これは確かに必要ですね。

本人認証の原理原則

本人の認証には、次の 3 種類があります。

  • 本人の情報(知識認証
    • 本人のみが知り得る情報
    • デメリット:盗聴、辞書攻撃・総当たり攻撃の可能性
    • 技術例: ID とパスワード
  • 本人の所有物(所有物認証
    • 本人のみが所有している物
    • デメリット:盗難や紛失による不正利用の可能性
    • 技術例:鍵、トークンキー
  • 本人の生体的特徴(生体認証
    • 本人の生態的特徴
    • デメリット:本人拒否や他人許容の可能性
    • 技術例:バイオメトリクス認証

それぞれにデメリットが存在するのがポイントです。まったく本筋と関係ありませんが、顔認証がマスクで使えなくなった今、虹彩認証が実現されて欲しいところですね。

アクセス制御の原理原則

認証によるセキュリティの仕組みを作るのが アクセス制御 です。

認証を含む 3 要素から構成され、 3 つをまとめて「 AAA 制御」ともいいます。

認証( Authentication )
利用の正当性(真正性)を確認

  • 手間がかかる
  • 認証における利便性を高める技術にシングルサインオンがある
認可( Authorization )
適切な利用者に許可

  • 適切な認可が必要
    職責分離
    業務担当者と承認者の権限や職責を明確に分離すること
    最小権限
    付与する権限は必要最低限の権限のみにすること
アカウンティング( Accounting )
利用履歴の確認。誰が、何を、いつ、どのように、をログ(履歴)として残すこと

認証にはユーザの手間がかかります。サービスを使うたびに何度もログインを求められて、面倒な思いをしたことがありますよね。あとは最近は Google の reCAPTCHA がツライです … 。裏側を向いている信号機も、信号機として選ぶべき ??

 

続いて、それを軽減するためのシングルサインオンの仕組みも紹介いただきました。 Google アカウントでの認証や SNS のアカウントを使ったものなど様々に利用する機会が増えましたね。

パスワードに関する攻撃

2 つめのテーマとして、パスワードへの攻撃について学びます。

多くのサービスでは、 ID とパスワードによる認証が使われています。 ID とパスワードは知識認証なので、知られたら終わりというデメリットがあります。

  • パスワードに関する攻撃は大きく分けて 2 種類
    • パスワード解析攻撃
    • パスワードリスト攻撃

パスワード解析攻撃 問題編

パスワード認証を不正に解析する攻撃手法です。これにより、他人がログインして、何でもできてしまいます。特に決済アプリなど金銭のやりとりが出来るものは危険です。

  • 総当たり攻撃(ブルートフォースアタック)
    • ID を固定化してパスワードを総当たりする
  • 逆総当たり攻撃(リバースブルートフォースアタック)
    • よくあるパスワードを固定化して ID を総当たりする
    • アカウントロックを回避することができる
  • 辞書攻撃(ディクショナリアタック)

パスワード解析攻撃 解決編

パスワード解析攻撃への対策は、テクノロジだけではうまくいかず、管理者・ユーザどちらも適切にルールを定めて、パスワードを管理するしかありません。

管理するときには、セキュリティ強度だけでなく、利便性とのバランスが大事です。

  • パスワードを難しくなれば解析が難しくなる
    • ただし利用者が大変(例:パスワード 100 文字)
  • セキュリティの強度だけでなく利用者の利便性や効率も考える
    • 運用体制や物理セキュリティも含んだ総合的なセキュリティ管理が必要
  • 解析や推測されないパスワード文字列を用いる
    • 文字種類を増やす(総当り攻撃対策)
      • アルファベットの大文字、小文字、数字を併用
    • 辞書掲載の用語を使わない(辞書攻撃対策)
  • 有効期限を設定する
    • 理由:長期間の利用は漏えい、解析の危険性
    • 対策:変更回数や入力回数を制限(アカウントロック)

パスワードレスが増えているのは、この危険と面倒さをスキップできるからなんですね。

パスワードリスト攻撃 問題

パスワードリスト攻撃とは、利用者 ID とパスワードの対応リストを用いた攻撃です。

  • Web サイトなどから情報漏えいした ID とパスワードのリストが作られて、闇で売られている
  • 自分のサイトを守っていてもほかかで漏れた ID とパスワードが使われる
  • ID とパスワードを使いまわしていると、パスワードリスト攻撃の被害にあう危険性がある

反対に、正当なユーザがパスワードを忘れてしまったときは、再発行も運用管理者の負担になるので、パスワードリマインダの導入が必要です。

パスワードリスト攻撃 解決編

パスワード攻撃を防ぐためのセキュリティ対策には次のようなものがあります。

  • 同じ ID とパスワードの使い回しをしない
  • 二要素認証の導入
    • 二要素認証に似た言葉に、 二段階認証 もある
    • 二要素認証は、知識、所有物、生体の 3 つの認証要素のうち 2 つを組み合わせた認証
      • 多要素認証ともいう
  • 二段階認証は同じ認証方式を 2 つ用いる
    • たとえばパスワードを 2 回にしてもリスト攻撃への対策は薄い

二要素認証の例として、日本の入出国管理は、生体(顔や指紋) + パスポートの二要素認証になっています。

 

また、多要素認証を使ったパスワードレス認証の技術に FIDO ( Fast IDentity Online ) があります。たとえば、スマートフォンからサービスを顔で認証するといった使い方をします。

ネットワーク盗聴の脅威

ネットワーク盗聴と SSL 解析攻撃 問題編

続いて、ネットワーク盗聴と、それを防ぐための SSL/TLS とその解析攻撃について学びます。

SSL/TLS とは

SSL/TLS は、 PKI ( Public Key Infrastructure 公開鍵基盤) によるサーバ証明書を用いて、クライアントとサーバ間で暗号化通信を実現する通信で、 URL の https:// という表記でおなじみですね。

もともとは SSL ( Secure Socket Layer ) だけでしたが、 中間者攻撃 (通信を行う二者間の経路上に割り込み、両者間の通信情報を盗聴や改ざんする攻撃)ができるという脆弱性が発見されました。

そこで、現在では SSL をもとにした新しい TLS ( Transport Layer Security ) が主に使われています。

SSL/TLS に関する攻撃と対策

  • Poodle 攻撃
    • SSL の脆弱性
    • 大量の通信を発生させて間に割り込んで通信内容を解析するという手口
    • データを繰り返し送りながら、エラーが正しいか正しくないかを組み込んで暗号解析する
    • 長い時間がかかるが、解析できてしまう
  • SSL ダウングレード攻撃
    • TLS の脆弱性
    • TLS からダウングレードして SSL を使わせる手口
    • FREAK 攻撃、 Logjam 攻撃、バージョンロールバック攻撃がある

SSL/TLS 脆弱性への対策は、単純な話ですが SSL を使わないことです。

インターネット詐欺とソーシャルエンジニアリングの脅威

ソーシャルエンジニアリングとフィッシング 問題編

最後のテーマは、インターネット詐欺やソーシャルエンジニアリングについてです。

    ソーシャルエンジニアリング

  • 人間の心理的な弱さを利用した不正行為のこと
  • ソーシャルエンジニアリングの特徴
    • 緊急性
      • 例:緊急、非常事態などを装い相手に混乱を発生させる
    • 誘導性
      • 例:相手の利益や興味を引く誘導行為
    • なりすまし
      • 例:相手の取引先や肉親、友人などに偽る
  • ソーシャルエンジニアリングの例
    • Microsoft の名を騙ったサイトで「不審なアクティビティのため Windows がブロックされました」のメッセージ
    • そこから偽のセキュリティサポートセンターに誘導する
    • または偽のセキュリティ修復プログラムのダウンロードに誘導する
      • マルウェアの危険性の高いプログラム

インターネット詐欺には フィッシング もあります。実在する組織や企業を装い、個人情報の詐取や詐欺などを実行する犯罪行為です。

  • フィッシング詐欺の手口
    • 攻撃者は偽サイトを作る
    • メール等で偽サイトに誘導する
    • 偽サイトでアカウント情報を入手する

メールは注意しているのですが、最近 SMS でも送られるようになってきて、もともと注意していなかっただけに、何度か間違えそうになりました。

先日 Google が “なりすまし” 防止のためにメールに企業のロゴを載せられるようになったというニュースがあり、認証が得られれば掲載できるとのことでした。

Gmail、なりすまし対策で送信元アイコンに企業ロゴ表示を可能に – ITmedia NEWS

一方で、 Web アプリケーションなどでメールを一斉送信・通知するときには、認証が強くなると大変になるので、まさに利便性とセキュリティはトレードオフの関係ですね。

ソーシャルエンジニアリングとフィッシング 解決編

その対策としてフィルタリングが挙げられました。

  • フイルタリングの方式は 2 つ
    • ホワイトリスト型:閲覧許可した対象をリスト化することでアクセスを制限
    • ブラックリスト型:閲覧禁止した対象をリスト化することでアクセスを制限

フィッシング詐欺リストにはブラックリスト型のフィルタリングが有効です。なお、ブラックリストのパターンファイルはセキュリティのソフトやサービス企業が提供します。

 

このフィルタリングの解説をもって、 1 つめのコース「 Web における脅威と対策」は修了しました。

Web サイトを狙ったサイバー攻撃事例

続いて、 2 つめは具体的な攻撃手法と対策を学びます。

ここでは、これまでの参加してみたレポートでは触れなかった攻撃を紹介します ( このコースでは他に SQL インジェクション、 XSS 、 CSRF を解説しています) 。

label関連する参加レポート

OWASP ZAP で Web アプリケーション セキュリティ対策|研修コースに参加してみた
ネットワークセキュリティの基礎~攻撃パターンとその対策~ 研修コースに参加してみた

OS コマンドインジェクション 問題編

次に扱う攻撃は OS コマンドインジェクション です。

    OS コマンドインジェクションとは

  • SQL インジェクションと同様、不正な命令を差し込む攻撃
    • SQL コマンドインジェクションはログインフォームの ID に OR 'a'='a のような SQL を入力。データベースに意図しない SQL を実行させる
    • OS コマンドインジェクションは SQL の代わりに OS のコマンドを注入
  • 具体的な被害内容
    • サイトの改ざん、削除
    • Web サーバのマルウェア感染
    • Web サーバの踏み台利用

OS コマンドインジェクション 解決編

OS コマンドインジェクションは OS のシェルを勝手に動かされる脆弱性です。

シェルとは次のようなものです。

  • シェルの例として bash や cmd.exe などの実行プログラムがある
  • cmd.exe を実行するとコマンドプロンプト画面が表示されてコマンド実行が可能になる

そのため、シェルでの対策が必要です。

  • シェルを起動できる言語機能は用いない
  • シェルを用いる際には、処理を制限する
  • シェルに対するチェック機能を実装することが重要
  • 引数を構成するすべての変数がチェック対象
  • チェックにはホワイトリスト(許可リスト)を用い、正しい処理に用いるコマンドしか実行させない

ディレクトリトラバーサル 問題編

トラバーサル( traversal )とは横断の意味です。ディレクトリトラバーサルとは、ファイル構造を不正に横断してアクセスする攻撃です。

ディレクトリトラバーサルは、外部からの不正アクセス (ex. URL のパラメータ) により攻撃者が Web サーバ内のファイル名を直接指定できてしまうと発生します。原因は、 Web サーバのパラメータ指定に関する脆弱性です。

    ディレクトリトラバーサルとは

  • パス名パラメータが未チェックのまま
  • 相対パス指定によりファイルの指定や参照が可能
  • 具体的な被害内容
    • Web サーバ内のファイルの開示( Web サイト内情報の漏洩)
    • Web サーバ内のファイルの改ざん、消去( Web サイトの改ざん、消去、破壊)

そのため、しっかりファイルアクセス操作へのセキュリティが必要です。

ディレクトリトラバーサル攻撃 解決編

ディレクトリトラバーサルへの対策には、ファイルアクセスに関するセキュリティ対応が必要です。

  • 外部からのパラメータによるファイルの直接指定をしない
  • ファイル名にはディレクトリを含めない

ディレクトリ名を含まないファイル名を設定するためには、たとえば basename() などの API を使ってパス名からファイル名のみを取り出すといった方法があります。

セッションハイジャック攻撃 問題編

Web アプリケーションでは、利用者を識別するための情報( セッション ID )を Web サーバが発行することでユーザの認証を管理します。セッション ID には Cookie や URL パラメータ値などを用います。

このセッションの管理に不備があった場合、セッション ID が不正利用される可能性があり、次のような危険性があります。

  • なりすましができる
  • 認証後に利用可能な Web ページにアクセスできる可能性がある
  • 登録情報などの改ざん、漏洩など、さまざまな不正が可能になる

このセッション ID を悪用した攻撃がセッションハイジャックです。

  • セッションハイジャックの主な 3 つの分類
    • セッション ID 推測
      • セッション ID を推測することで攻撃する
      • セッション ID の値を大量に生成して利用可能な ID を算出
    • セッション ID 盗聴
      • 利用可能なセッション ID を盗聴、取得することで攻撃する
      • ネットワーク盗聴やクロススサイトスクリプティングなどで取得する
    • セッション ID 強制利用
      • 攻撃者が正常なセッション ID を事前に用意して被害者に強制利用させることで攻撃する
      • 攻撃者が事前に用意した不正サイトへ誘導することで不正な Cookie を被害者側のブラウザに設定することが可能
      • セッション ID 固定攻撃とも呼ばれる

セッションハイジャック攻撃 解決編

セッション ID を狙った攻撃への対策には、次のようなものがあります。

  • セッション ID を推測困難にする
    • たとえば昇順や降順は危ない
    • 対策例:疑似乱数を用いてランダムな値にする
  • URL パラメータ内にセッション ID を組み込まない
    • 対策例:Cookie や POST メソッドの Hidden パラメータに組み込む
  • Cookie の適切な管理
    • Cookie のセキュリティ
    • 対策例 1: Cookie の secure 属性を用い、 HTTPS 通信の時だけ送信する設定にする
    • 対策例 2: Cookie の状態管理をする
  • ユーザ認証後は新しいセッション ID で通信する

Web アプリケーション開発では、セッションなど認証に関連する機能は一度作り込んでから変更しようとすると、すべての機能に影響しがちなため、設計段階からセッション ID 管理に対するセキュリティ実装が重要です。これを セキュア・バイ・デザイン ともいいます。

 

このレポートでは 3 つの攻撃を取り上げましたが、このコースでは合計 6 つの主要な攻撃を解説しています。このすべての攻撃と対策を学んだところで、コースは修了しました。

まとめ

初めてセキュリティを学ぶ方が体系的に学べるよう、全体概要から攻撃と対策を少し深堀りしながら学べました。

受講していると、冒頭にあげた自分に起こったセキュリティ事故や事件が思い出されました。でも、実は被害はゼロだったのです。それはすべて Web アプリケーションが不正使用や乗っ取りを検知して、私に知らせてくれたからでした。

そういった体験があるだけに、そもそも認証は何をもって行うのか、なぜ Web アプリケーションで普段とは異なる端末からログインすると通知が来るのか、そういったセキュリティの原理原則と実装の仕組みが上手く機能していることに気付けました。

はじめてセキュリティに触れるという方が入門するのに、セキュリティの世界を俯瞰しながら、体系的に掘り下げられるので、とてもオススメのコースでした!

 


SEカレッジについて

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

SEcollege logo
SEカレッジ
IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 コースをほぼ毎日開催中!!

午前免除 FAQ

タグ一覧