Security
Overview
このセクションでは、ITセキュリティに関連するさまざまなものをまとめたセクション。
セキュリティの基本概念から最新の脅威、脆弱性への対応方法、データ保護、セキュリティベストプラクティスまで、幅広く網羅。
セクション内容
- 脅威と攻撃: 最新のサイバー脅威、攻撃手法、およびそれに対する防御策。
- データ保護: 暗号化、バックアップ、データ漏洩対策などのデータ保護手法。
- 認証とアクセス管理: ユーザー認証、権限管理、多要素認証などのセキュリティ強化策。
- ネットワークセキュリティ: ファイアウォール、VPN、侵入検知システム(IDS)などのネットワーク保護技術。
- コンプライアンスと規制: GDPR、CCPAなどのデータ保護規制やセキュリティコンプライアンス。
情報セキュリティの際に参考にする機構
ISMSとPマークの違い
APIテクニカルガイドブック(内閣官房情報通信技術(IT)総合戦略室)
情報セキュリティの3要素
情報セキュリティ対策の基本として機密性・完全性・可用性の3つの要素が定義されている。
機密性(Confidentiality)
機密性は、許可された対象者以外に情報を開示しないこと。
機密性を阻害する主な脅威による情報漏えいが挙げられる。
- 不正アクセス
- 通信傍受など
主な対策。
- アクセス制限
- 暗号化
完全性(Integrity)
完全性は、情報が適切に保護されて信頼できる状態であること。
完全性を阻害する主な脅威として以下が挙げられる。
- マルウェア感染
- 不正操作などによる情報の改ざん
AWSではAWS Guard Dutyを利用してマルウェア感染や不正な振る舞いを検知したり、AWS WAFによりWebアプリケーションを悪意ある攻撃から防御できます。
可用性(Availability)
可用性は、必要なときに必要な機能へアクセスできる状態であること。
災害やシステム障害などで中断されずに、システムやサービスへアクセスできる状態を保つ必要がある。
可用性を阻害する主な脅威として以下が挙げられる。
- 複数の拠点から大量アクセスを送りつけてサービス停止を狙う「分散型サービス妨害(DDoS攻撃)」
AWSではAWS Shieldの利用や、CloudFrontのようなCDNサービスを利用することで、分散型サービス妨害(DDoS攻撃)からシステムを保護できます。
また、マルチAZでシステムを構成するなど冗長構成とすることで、単一箇所の障害によりシステム全体が停止してしまう事象を防ぐことが可能です。
可用性に関しては100%にすることは原理的にできない。 これはすべてのサーバーやネットワーク機器が同時多発的に故障する「グランドクロス」的偶発の可能性を原理上排除できないため。
システムの世界では、「信頼性(Reliability)」と「可用性(Availability)」という似た言葉がある。
文脈によってはほぼ同じ意味で使われることもあるのですが、信頼性が「ハードウェアやソフトウェアが故障する頻度(故障率)や故障の期間を示す概念」であるのに対して、可用性は「利用者から見て、システムをどの程度使用できるか」を示している。
という違いがある。
- システムを構成するコンポーネントについて適用するのが信頼性
- システム全体としてユーザ目線で考える場合が可用性
可用性を上げる2つの戦略
心臓戦略と腎臓戦略がある。
システムの世界においても、やはり「心臓戦略」と「腎臓戦略」の両方が存在する。
昔はこの2つの戦略のどちらがより効率的なのか、はっきりわかっていなかったので、両論併記というか、どちらの路線も追求されていた。
しかし現在では、ほぼ「腎臓戦略」路線に軍配が上がっています。1つ1つの部品の信頼性を上げるより、低品質でも良いから数でカバーという戦略
処理を行うだけの責務の場合は冗長化は簡単(Webサーバーなど) データを保持するところの冗長化は大変(整合性を担保しないといけないため)
クラスタリング
腎臓戦略において、同じ機能を持つコンポーネントを並列させることを、「クラスタリング(Clustering)」と呼ぶ。
「クラスタ」とは、物や人の集まりを指す言葉で、ブドウなどの「房」という意味もあある。
そのイメージから、システムの世界では、「同じ機能を持つコンポーネントを複数用意して1つの機能を実現する」という意味で使う。
情報セキュリティの7要素
情報セキュリティの3要素以外に、付加的要素である真正性・責任追跡性・否認防止・信頼性の4要素を加えることで情報セキュリティ7要素と呼ばれる。
セキュリティを高めるためには、情報セキュリティの3要素だけではなく残りの4要素も対策することが求められる。
真正性(Authenticity)
真正性は、システムの利用者が本物であると証明すること。
真正性を阻害する主な脅威は以下がある。
- なりすましによる不正ログイン
対策としては以下の候補がある。
- 多要素認証
- 生体認証
- デジタル署名
AWSでは、AWS IAMやAWS Cognitoで作成したユーザーに対して多要素認証を必須にしたり、AWS ACMにてサーバー証明書を発行することが対策として有効です。
責任追跡性(Accountability)
責任追跡性は、誰にシステムが操作されたのか明確にし、追跡できる状態であること。
ログ情報の取得が主な対策となる。
否認防止(Non-repudiation)
否認防止は、操作者があとから操作を否定できないよう証明すること。
ログの改ざん防止が主な対策となる。
信頼性(Reliability)
信頼性とは、システムの動作が意図したとおり確実に行われること。
信頼性を阻害する主な脅威として、システムに内在するバグによる想定外の挙動や、脆弱性を悪用した攻撃が挙げられます。そのため、構築するシステムに対してバグや脆弱性が埋め込まれていない状態にすることが理想。
リスク管理
セキュリティに関するすべてのリスクに対処することが理想ですが、コストや難易度などの都合で対処しきれないものもある。
そのため、リスクに対して以下の4つの要素から、リスクの発生確率・コスト・影響度などを踏まえて対応方針を検討する。
リスク回避
リスクの発生確率が高すぎたり、対処する場合の影響が大き過ぎる場合に、リスク自体を回避する選択肢を取る。
「リスクが含まれるサービスや機能のリリースを取りやめる」といった対応が挙げられます。
リスク受容
リスク回避とは正反対にリスクを受け入れること。
リスクの及ぼす影響や確率が小さい場合に、「リスクが発生するものとして発生時のオペレーションを準備しておく」などの対応が挙げられます。
リスク低減
リスクを引き起こす要素に対してセキュリティコントロールを実施して、リスクの発生確率や影響度を低減させる。
「リスクが発生する原因を特定して発生確率を下げる」といった一般的なセキュリティ対策はこのリスク低減に該当します。
リスク移転
リスクの対応および影響範囲を外部にゆだねること。
「地震保険やサイバー保険に加入する」などが挙げられる。
IPA
独立行政法人情報処理推進機構(IPA)は経済産業省のIT政策実施機関。
多彩な施策でデータとデジタルの時代を牽引し、安全で信頼できるIT社会を実現する。
PII
個人を特定できる情報(PII)とは、特定の個人を識別するために使用される一連のデータのことです。これは機密データとみなされ、個人情報の窃盗にも使用される情報です。PIIは、ユーザーの名前、住所、生年月日のような単純なものから、フルネーム、住所、社会保障番号、財務データのような機密性の高いものまであります。データ漏洩では、PIIはダークネット市場で販売されると高い価値を持つため、攻撃者のターゲットになります。
セキュリティの3大要素
セキュリティ対策で求められる要件として、一般的に以下の3種類が上がる(英語での頭文字を取ってCIAと呼ばれる)
- 機密性 → 許可されたものだけが情報にアクセスできる
- 完全性 → 情報の改ざん、欠落が起こらない
- 可用性 → 必要なときにいつでもサービスが提供されている
認証
認証は「あなたは誰ですか?」を確認すること。
要はパスワード認証で本人を特定すること。
2段階認証などもある。
SMS認証
SMS認証とは、ユーザーのスマホや携帯電話にSMS(ショートメッセージ)を送信し、そこに記載された一時的な確認コードをWeb上で入力することで、本人確認を正しく行う認証システム。
企業側の動作
ユーザーからSMS認証の要求を受けたら、API経由でSMS送信サービスに送信を要求する。
SMS送信サービスが認証コードを記載したSMSをユーザーに送信
Web上で認証コードが入力されると、API経由でSMS送信サービスから企業側に送達結果が通知される。
正しいことが確認されたら認証完了
SMS送信サービスで認証を行うためには、自社システムとのAPI連携が必須。
サービスによってAPI連携の仕様が異なるため、連携可能かどうか確認しておく必要がある。
認可とは
一方、認可は「あなたには、リソースにアクセスする権限がありますか?」を確認すること。
たとえば次のような事例が認可。
家の鍵を持っているから、家に入ることができる
バスの乗車券を持っているから、バスに乗ることができる
認証と認可の違い
わかりやすい パスポートは本人確認に用いられつつ(認証)、これにより渡航する権利を得られる(認可) 免許証は本人確認に用いられつつ(認証)、これにより自動車を運転する権利を得られる(認可)
WAF(Web Application Firewall)
従来のファイアウォールやIDS/IPSでは防ぐことができない不正な攻撃からWebアプリケーションを防御するファイアウォールのこと。
Webアプリケーションという観点から一般的にはWAFといえばWebサーバが利用するポート80番・443番のトラフィックを双方向で監視して悪意あるユーザからWebアプリケーションとその背後にあるデータを守る製品のこと。
※一般的なWebアプリケーションに対する攻撃手段としてSQLインジェクションやXSS(クロスサイトスクリプティング)などの脅威から保護する。
ReDoS
符号・暗号化・ハッシュの違い
暗号化、エンコード、およびハッシュは、データのフォーマットを変換するために使用される技法
ハッシュ
データを加工する技術のひとつ ハッシュ値とは、あるデータを暗号学的ハッシュ関数と呼ばれる方式で変換したもの。
仕様
- ハッシュ値から元のデータを復元することはできない。
- また異なる2つのデータから作ったハッシュ値同士が同じ値になる可能性は極めてひくい
dbにパスワードが保存される時によく使われる(平文で保存はだめ) dbに平文を保存してはいけない理由
- ハッシュのアタック方法 参考URL
レインボーテーブル攻撃対策
ソルト(Salt)の使用
パスワードごとに別々のソルトを用意して、同じパスワードでもハッシュ値が異なるようにする。
オフライン総当たり攻撃対策
ストレッチング(ハッシュ関数を繰り返して実行)によって、ハッシュ化の処理を意図的に遅くする。
ただし、パスワード認証の時間が長くなるというトレードオフがある。
ソルト
ソルトとは、パスワードをハッシュ値へと変更する際にパスワードへ付与するランダムな文字列のこと。
ストレッチング
ストレッチングとは、ハッシュ関数を用いてハッシュ値への計算を数千回~数万回繰り返し行うことです。
IPA
プログラマの暗号化入門
暗号化の対語は復号
登場人物を理解することが大切。
暗号化の登場人物 入力として、平文、鍵、初期ベクトル、暗号モードを渡すと、 出力として、暗号文ができ上がる。
復号化の登場人物 入力として、暗号文、鍵、初期ベクトル、暗号モードを渡すと、 出力として、平文ができあがる。
用語
平文(ひらぶん) 暗号化されていない元のデータのこと(英語ではplain text)
暗号文 何らかの暗号アルゴリズムで秘匿化されたデータ(英語ではcipher text)
鍵 平文を暗号文にする際、使用するデータのこと(英語ではkey)
初期ベクトル 同じ平文が同じ暗号文にならないように使用するデータのこと(英語ではinitial vector、もしくはIV) 平文中に同じデータが繰り返し出てきた場合に、すべてが同じ暗号文に変換されてしまうと、その頻度などから平文が推測されやすくなってしまう。 そのため強度的に不安な部分を初期ベクトルを使って同じ暗号文にならないようする。 初期ベクトルは鍵と違って他人に知られても問題ないもの
暗号モード 初期ベクトルをどのように使用するか決めるモードのこと。(英語では、cipher mode) 初期ベクトルの利用方法はいくつかの種類があります。(ECB、CBCモードなど)
パディング 暗号アルゴリズムにもよりますが、暗号化をするにあたって、平文のデータ長は何らかの倍数長でなければなりません。(たとえば16byteの倍数長) 平文が倍数長になっていない場合に、平文にムダなデータ(詰め物)を付加することをパディングすると言います。 パディングデータは復号時には除去されます。
暗号化は2種類ある
逆にいうと2つしかない。
-
共通鍵暗号 暗号鍵と復号鍵が同じ鍵なので共通鍵暗号と言われる。 家の玄関の鍵と同じ仕組み。 後述する公開鍵暗号に比べて、暗号化の処理速度が速いという特徴がある。
-
公開鍵暗号
Digest認証(ダイジェスト認証)
HTTPの認証方法のひとつ。 ユーザ名とパスワードを暗号学的ハッシュ関数でハッシュ化して送る。 Basic認証では防げなかった盗聴や改ざんを防ぐために考案された 使用する暗号学的ハッシュ関数としては、当初MD5が規定され、後にRFC7616でSHA-2が加わっている。
UUID ULID
Tips Facebook, Twitter, Instagramなどがどうやって生成しているか
ULID(Universally Unique Lexicographically Sortable Identifier)はUUIDを改良したもので、UUIDと同じ128ビットでありながら、UUIDは36文字ですが、ULIDは26文字で表される。 ULIDジェネレーター
チェックサム(checksum)
その送られてきたデータは途中でおかしくなっていないかをチェックする方法のひとつ。 ruby gemsとかはチェックサムが表記されているためダウンロードした際に、データがおかしくないか確認できる。
サニタイズ(sanitize) / サニタイジング(sanitizing)
参考URL 処理参考 サニタイジングとは利用者が入力した文字データを受け取る際に、プログラムにとって特別な意味を持つ可能性のある文字や文字列を検知して、一定の規則にしたがって別の表記に置き換えること。 これはクロスサイトスクリプティングを防ぐことになる
セッションハイジャック
SQL インジェクション
XSS
クリックジャッキング
Webhookとセキュリティー
SPAセキュリティ
SPAでもセキュリティの基本は同じ
-
フロント側(JS) クロスサイトスクリプティング オープンリダイレクト evalインジェクション
-
サーバー側(API) SQLインジェクション クロスサイトスクリプティング(反射型、持続型) クロスサイトリクエストフォージェリ(CSRF)
暗号鍵の管理
暗号鍵を利用すると主に次の2つのことが実現できる。
- 情報資産を第三者へ読み取られないようにする【暗号化】
- 情報資産が改ざんされていないかどうかを確認する【改ざん防止】
パスワードポリシー
パスワードローテーション
従業員に定期的にパスワードの変更を強制する

