改めてまとめてみたシリーズ セキュリティー基礎編
前提
web通信において, 下記が守られていないとセキュアな通信とは言えません
- 通信相手のサーバーが本物であること(証明) --- 証明書
- 通信情報が改ざんされないこと(正真性、完全性) --- 電子署名
- 通信が盗聴されていないこと(機密性)
公開鍵、共通鍵認証方式について
- 共通鍵認証方式
暗号複合化に同じ鍵を使用するパターンでシンプルな暗号化方法
複合などに必要な処理も軽いのが特徴
ただこの共通鍵認証方式には問題があり、それは鍵配送問題である。
それはどのようにサーバーなどに,共通鍵を送る問題
そこで登場するのが公開鍵認証方式
- 公開鍵認証方式
公開鍵認証方式では暗号化するキーと複合化するキーが別のものとなる。
暗号文を作り出す鍵が公開鍵
暗号文を複合化する鍵が秘密鍵となる
公開鍵認証方式ではデメリットもあり, 安全な暗号化ではあるものの、複合するのに時間がかかる。
余談:
よくどっちに秘密鍵おけば良いですかという質問を受けるので簡単な覚え方は自分PC側に秘密鍵を持つ覚えておくと良いかもですね!
理由としてはサーバーの情報をssh経由で取得したいので、サーバーの公開鍵で暗号化し、自分のPCで複合化することでその情報を見ることができるようになるからですね!
公開鍵は名前の通り大量にコピーしてばら撒いておけばOK
秘密鍵は厳重に保管してください!
- ハイブリット暗号方式
共通鍵と公開鍵認証方式のいいとこ取りをしたものです。
共通鍵は鍵配送問題があるが、処理は早い
公開鍵は安全だが、処理が遅い
そこで共通鍵を送るのに、公開鍵認証方式を使い,鍵を送ることができたら、共通鍵認証方式を利用する
証明書 通信相手のサーバーが本物であること(証明)
必要性について
webサイトなどに証明書をつけることで、そのサイトが偽サイトなどでないことを保証できる
この証明書は認証局(CA)が発行する。
証明書にとして発行されるものの内容は
- 個人情報
- 公開鍵
- CAによるデジタル証明
- 発行者
- 有効期限
そもそも認証局って何??
この公開鍵は確かにこの人のものですよと認める期間
認証局が発行する証明書の審査にはレベルがある
クラス1: メール認証
クラス2: 第三者期間での本人確認
クラス3: 対面認証など
証明書が発行されるまでの流れ
- 申請者は秘密鍵公開鍵を発行する(ssh keygen)
- 公開鍵と個人情報を認証局に提出し、審査を受ける(審査レベルはクラス1から3まである)
- 審査に問題なければ、公開鍵と所有者情報に認証局の署名をくっつけ, 証明書を発行する
認証局は証明書の失効する役割も持つ
- 秘密鍵を紛失してしまった場合や流出してしまった場合には、所有者は認証局に失効を申し出る
- 認証局は証明書を失効させ証明書失効リスト(CRL)に追加して公開する
SSLサーバー証明書のしくみ(https暗号化通信の仕組み)
- クライアントはサーバーに接続要求をする
- サーバーはサーバー証明書をクライアントに送信する
- クライアントは認証局に本物の証明書であるかを問い合わせる
- 本物であることが確認できたら、共通鍵を証明書の公開鍵で暗号化しサーバーに送信する
- サーバーの秘密鍵で複合化し共通鍵を取得する
- 共通鍵で通信を行う
電子署名 通信情報が改ざんされないこと(正真性、完全性)
電子データの作成者情報を電子ファイルに付与し、電子ファイルが改ざんされていないことを証明する技術
電子署名の説明をするのに必須の技術、 1方向ハッシュ関数について
対象データからランダムな英数字を生成生成する技術
長さが固定なのが特徴
ハッシュ値から元データを逆算することは現在の技術では不可能
電子署名の仕組み
- 電子ファイル(HTMLなど)が改ざんされていないことを保証するには、電子ファイルからハッシュ値を計算しAさん(サーバー)の秘密鍵で暗号化する。
- 電子ファイル、証明書、暗号化したハッシュ値を一緒にクライアントに送信する
- クライアント側では証明書の公開鍵で暗号化したハッシュ値を複合化し、ハッシュを取り出す
- クライアント側で電子ファイルをハッシュ化する
- 複合化したハッシュとクライアント側でハッシュ化したハッシュ値が一緒であれば成功
しかしそれであれば電子ファイルを暗号化し、クライアント側で複合化すれば良いのではないでしょうか??
それはダメですね!
なぜなら電子ファイルの大きさが大きくなると、暗号化に時間がかかってしまうためです。
一方ハッシュはどんなに大きいファイルでもハッシュの長さは固定なので、ファイルが大きくなっても
暗号化のコストは変わらないのでハッシュを暗号化しクライアントに送るのです!
暗号化スイートについて
- 鍵交換
- 共通鍵暗号
- デジタル署名
- 一方向ハッシュ関数
上記を以下のアルゴリズムでどう組み合わせるかを決めるプロトコル
- RSA
- AES128
- SHA-256
- ECDHE
この暗号化スイートはクライアント側がサーバーに送信するものである。
- サーバーは使うことができる暗号化スイートを送信
- クライアント側で暗号化スイートを選択して、サーバーに送る
awsにおける証明書
WAFに関して
webアプリケーションにおいはさまざまな攻撃を受けるので全ての階層においてセキュリティー対策を行う必要性があります。
- ネットワークへの攻撃はファイヤーウォール
- OSやミドルウェアーに対する攻撃はIPS/IDS
- webアプリケーションに対する攻撃はwafで防ぐ
IDS, IPSとは
- IDS
簡単に言うと不正検知システムのことをいう
webサーバーを動かしてるOSやネットワークを保護し,不正なアクセスや異常がないかをリアルタイムで検知し、
通知を行う
- IPS
こちらもIDSと同様、webサーバーを動かしてるOSやネットワークを保護し,不正なアクセスや異常がないかをリアルタイムで検知する部分までは一緒だが、IPSは検知した場合は遮断をするなどのアクセスをとる
IDS,IPSの種類
- ネットワーク型 - ネットワークに流れる通信パケットを監視する(ネットワーク上に配置される)
- ホスト - ログファイルやファイルの改ざんなどを監視する(サーバー上にインストールされる)
WAF
webサーバーやDBの前に設置され、webアプリケーションに対する攻撃を保護する役割担う
web apllication版のファイヤーウォール
代表的なwebアプリケーションに対する攻撃手法のクロスサイトスクリプティング, SQLインジェクションといったアプリケーションの髄弱性をついた攻撃から保護する部分
WAFの種類
- ソフトウェアー型 - ソフトウェアーをサーバーにインストールを行う
- アプライアンス型 - 機器を前面に導入する
- クラウド型 - aws wafのようなイメージ
OSIモデルとセキュリティー対策
DoS攻撃, DDoS攻撃について
標的のサーバーに大量アクセスし、サーバーをひっ迫させる攻撃手法のこという
複数のサーバー(または無関係のpc)を使用し、攻撃することをDDoS攻撃という
攻撃種類
- UDP reflection attacks
- SYN floods
- HTTP floods, DNS query floods
- SSL abues
上記がある
UDP reflection attacks(DNSアンプ攻撃)
DNSサーバーに対して、送信元IPを偽り、アクセスすることでDNSからの応答を攻撃対象のサーバーにし、
攻撃する手法
- SYN floods
3wayハンドシェイクを使用した攻撃手法
通常サーバーとクライアントはTCPで通信を確立するためには、シンクロナイズ(SYN)というパッケトを送信し、
サーバーからアクナレッジ(ACK)を送信し、通信を確立するが、送信元を偽ることでサーバーは送信先が見つからず、一定時間接続待ちをするので、接続のためのリソースを使ってしまい、正規のリクエストの接続を受け入れることができなくする手法
-
HTTP floods
多数のサーバーなどにbotをインストールし、標的サーバーにHTTPリクエストを送り、正当なclientが
アクセスできないようにする手法 -
SSL abuse
- clinetとサーバーとの通信を行う際に本来httpsでリクエストを送る部分をhttpでリクエストを行うようにし、
- httpのリクエストは攻撃者のサーバーにアクセスするようにする。
攻撃者サーバーからは従来のhttpsで本当のサーバーにリクエストを送り変えてきたレスポンスをclientに返す。 - clinetはそのレスポンスのページに対してログイン情報などを入力し、リクエストを送信をすると攻撃者のサーバーにhttpで送信されるため、ログイン情報などが盗まれてしまう手法
- DNS query floods
複数のサーバーにbotをインストールし、DNSサーバーに大量のアクセスを送信することで、正当なclinetが
名前解決をできなくする手法
クロスサイトスクリプティング(XSS)
動的webページにおいて、悪意のあるスクリプト付きwebページをクリックすると、別サイトに遷移して悪意のあるスクリプトが実行される
例
投稿機能などにスクリプトを含む本文に仕込んで登録し、投稿内容をホバーするとスクリプトが実行されてしまうといったことがある
発生する可能性がある被害
- セッションハイジャック: クッキーに保存されている、セッションIDを取得するセッションを取得するスクリプトを埋め込まれることで、なりすましログインなどが可能になる
- クーキー取得: クッキーを取得するスクリプトを埋め込まれることで、個人情報が盗まれる
- webページの改ざん
セッションハイジャックについて
悪意のあるスクリプトの例
XSS代表的な攻撃方法
- 反射型XSS
攻撃者が悪意のあるサイトやメールを介してスクリプトを実行する
クリックすることで髄弱性のあるサイトにリクエストを送信し、応答されたスクリプトがブラウザーで実行される
- 蓄積型XSS
DBに悪意のあるコードを保存させる手法
-
DOM base XSS
クライアント側HTML生成の際に、悪意のあるコードが実行される
-
対策に関して
対策としてはサニタイズするかwafで防ぐしかない
SQLインジェクション
webサイト経由でsqlが直接操作されてしまうこと
防ぐ方法
またはwaf
Discussion