lu100101の日記

勉強の記録

20210425

  • AtCoder
    • 休んでる間のABCとARCの300, 400点問題埋め
      • ARC 114
        • A Not coprime
          • 難しいこと考えずにできるときは全探索!
          • 計算量の見積もりができない……
      • B Special Subsets
        • 解法も実装もサッパリ
        • 特にサイクル数を求める実装は要復習
      • ABC 196
        • C Doubled
          • 難しいこと考えずにできるときは全探索!
          • よく考えたら O(N)でいけた…
          • 難しく考えて O(1)で解いた
        • D Hanjo
          • DFS理解してない&実装できないのがばれる
          • 解答例>>とかよくわからんのがいくつかあったけどPythonでのビット演算だった
          • 当たり前だけどglobalで宣言する変数はグローバルで定義しないといけないから、いつものようにmain()で実行するならその外側で定義する必要あり
  • テスト駆動開発
    • 第Ⅰ部 他国通貨
      • TDDの本質は「テストに通る」という「正解」の状態をキープする、または、外れてもすぐそこに戻るように(ステップが小さくても)確実に正しいコードを書き続けること
      • ゆえにテストは必ず「正解」でなければならない

20210424

  • AtCoder
    • ABC 199
      • 二か月ぶりの参戦予定だったが起きたら21:30だったので断念
    • 休んでる間のABCとARCの300, 400点問題埋め
      • ARC 113
        • C String Invasion
          • 最大となる作戦は分かっても実装ができなかった
      • ABC 193
        • C Unexpressed
          • 簡単だった
          • setの復習
            • not inはsetが速い
            • {}は空の辞書、空のsetはset()で初期化
            • 足すときは|
        • D Poker
          • 難しいこと考えずにできるときは全探索!
          • あとは丁寧に実装するだけだった
      • ABC 194
        • C Squared Error
          • Aで全探索するだけ
          • 数学使えば O(A)で行けると思う
        • D Journey
          • ただの算数
      • ABC 195
        • C Comma
          • ただの算数
        • D Shipping Center
          • 最大値を得る方法が簡単な問題だったがDPを使うと思ってしまい、解けなかった(実装は簡単だった)

20210418

  • 情報処理安全確保支援士試験
    • 午前二試験
      • 過去問と同様に、悪くても7割、たぶん8割くらいとれてそうだからまず大丈夫
    • 午後一試験
      • 午後一は時間に余裕があるので、予定していた通りに3問とも解いて自信のある2問を選択することに
      • 問1:8割~、問2:6割~、問3:8割~という感じだったので1と3を選択
      • まず通っただろうと思い20分を残して退出
      • 過去問では6割も怪しかったけど、予想以上にできて調子に乗る
    • 午後二試験
      • 午後二は時間が厳しいので、問1から解いていって序盤で怪しい問題が2, 3問出たら捨てて問2に行く作戦
      • 問題文を読むのもそこそこに最初の3問くらいを読んだら行けそうな感じ、ついでに後半もみたら悪くなさそう、ということで問1で行くんだろうなと考えながら解き始める(一応、問2に切り替えるプランも考えてはいる)
      • サッパリな問題もなく順調に解いていき、スルーしたでかい論述2問を残して解いたところで残り1時間ちょい、うち一問はもう少しでわかりそうだったので問1で行くことに決める
      • 残り45分くらいでそれっぽい答えを書いて一安心
      • そこからは見直しを2周くらいして、記述のミスを数個発見、修正して残り30分で退出
      • SNSによると問2のコンテンツ性が高かったらしいけどほぼほぼ読んでなくて少し後悔

4. サーバセキュリティ

サーバの要塞化

  • 最新バージョンの維持
  • パッチの適用
    • 検証環境を用意して回帰テスト
    • リリース後も異常を検知する監視体制を整備
    • 元に戻せるように必要ファイルのバックアップ
  • デフォルト状態からの変更
    • 不要なサービスの停止
    • 不要なアカウントの削除
  • 適切なアクセス権の設定
  • ログの設定

Webサーバのセキュリティ

  • 重要なファイルを公開ディレクトリに置かない
  • HTTP認証
    • Basic認証
      • ID/PWDを平文で送信
    • Digest認証
      • チャレンジレスポンス方式を利用
  • セッション管理
    • エストリングにセッションIDを含める
      • GETメソッド
        • URLの後の?に続ける
      • POSTメソッド
    • hiddenフィールドにセッションIDを含める
    • Cookie
      • 安全な利用方法
        • 推測しにくいセッションID
        • 適切なdomain属性
        • 適切な有効期限
          • Expires:日時を設定
          • Max-Age:秒を設定
        • Secure属性
        • HttpOnly属性
    • 攻撃と対応策
      • 攻撃
        • セッションハイジャック
          • セッションIDを盗聴、推測することによるなりすまし
        • セッションフィクセーション
          • 正規のWebサイトから取得したセッションIDで利用者にログインさせ、ログイン後に利用者になりすます
          • クッキーモンスターバグというブラウザの脆弱性を突く
          • 対応策
            • 認証後に新たなCookie発行
        • HTTPヘッダインジェクション
          • エストリングに不正なコードを挿入する
          • 対応策
            • 改行コード(CRLF)
            • 改行コードを無効化、改行後を削除
  • WAFの導入
  • オープンリダイレクト対策
  • クロスドメイン
    • Same-Originポリシ
    • JSONP
      • 危険
    • CORS
      • Cross-Origin Resource Sharing
  • XMLHttpRequest

DNSサーバ

  • ゾル
  • キャッシュサーバ
  • 権威DNSサーバ(コンテンツサーバ)
    • 反復的問合せ
  • 脅威
  • DNSセキュリティ
    • 権威DNSサーバに不要な記載を残さない
      • CNAMEレコード
      • Aレコード
    • オープンリゾルバの禁止
      • キャッシュサーバと権威DNSサーバを分離
      • 権威DNSサーバにキャッシュ機能を持たない
      • キャッシュサーバにコンテンツ機能を持たない
      • キャッシュサーバに外部からのアクセス禁止
    • ソースポートランダマイゼーション
      • ソースポート番号をランダム化する
    • DNSSEC

プロキシサーバ

  • 目的
    • 端末を隠蔽
    • 一元管理
      • アクセスログチェック
      • URLフィルタリングソフト
      • アンチウィルスソフト
    • 認証機能
    • 標的型攻撃の出口対策

DBサーバ

  • 表領域暗号化
    • 透過的暗号化
      • 利用者側は意識しない
  • バックアップデータの暗号化
  • APとDBサーバ間の通信経路の暗号化

セキュリティ対策

3. ファイアウォール・IDS・IPS・UTM

ファイアウォールの種類及び方式

  • パケットフィルタリング型
    • ルータ同様、IPパケットを通過させるか判断する
    • ダイナミックパケットフィルタリング
      • リクエストパケットに対応する戻りのパケットだけ通過させる
  • ゲートウェイ
    • ゲートウェイとして機能
    • サーキットレベル
    • アプリケーション
      • アプリケーションレベルでの制御が可能
  • パーソナルファイアウォール
    • クライアント端末だけを守る
  • WAF
  • ステートフルパケットインスペクション機能
    • ダイナミックパケットフィルタリングの高機能版
  • ACL
    • 設定項目
    • 設定
      • デフォルト禁止
      • インターネットからのアクセスはDMZに束ねる
      • インターネット及びDMZ→社内LANは原則禁止
      • 危険なポートは塞ぐ
  • 運用
  • インシデント発生時の被害状況の確認
    • ログを確認し、外部C&Cサーバとの通信が成功して情報が持ち出されたかどうか判断する
  • パケットフィルタリング型FWで防げない攻撃
  • L7ファイアウォール

IDS

  • 種類
    • HIDS
      • ホスト型
      • 監視対象のホストにインストール
      • 機能
        • 対象ホストのログファイルを監視
        • ホストが受信する送受信パケットを監視
        • ファイルの不正な改ざんを監視
    • NIDS
      • ネットワーク型
      • 監視対象のネットワークセグメントに設置
      • 機能
        • プロミスキャスモード
          • 自分宛でないパケットもすべて取得する
        • ステルスモード
        • SW-HUBには、モニタリングポートに接続

検知の仕組み

  • Misuse検知
  • Anomaly検知
    • アノマリ検知型
    • 正常となるパターンを登録し、正常動作から離れた動きをするものを異常として検知する
    • 異常な数のパケットに強い
    • 仕様に反したパケットに強い

IDSの問題点

  • 検知できるが侵入はされる
  • false positive
  • false negative

2. PKI

ディジタル署名の仕組み

  • 送信側が本文 + ハッシュ関数 = メッセージダイジェスト作成
  • 自分の秘密鍵で暗号化
  • 対になる公開鍵で復号
  • 受信側もメッセージダイジェストを作成し比較

PKI

  • CA
  • RA
    • 登録局
    • 申請を受け付けて、承認や認可を行う
  • IA
    • 発行局
    • ディジタル証明書やCRLの発行を行う
  • CSR
    • CAに提出する証明書署名要求
  • CP/CPS
    • 証明書ポリシ/認証局運用規定
    • 必要に応じて利用者に公開する
    • 内容
      • ディジタル証明書の利用者、適用範囲
      • 証明書申請手続き方法
      • 失効や効力停止手続き方法
      • キーペア作成方法
      • 秘密鍵の受渡方法
  • 申請
    • 鍵ペアを生成
    • CSRを作成し、CAに申請
    • CAがディジタル証明書を発行
  • 確認

ディジタル証明書の形式

  • X.509
  • PKCS#7
    • 複数の証明書 + 暗号化データを含むことができる
    • サーバ証明書を配布したり移動したりするときに使われる
  • PKCS#12
    • 複数の証明書 + 秘密鍵を含むことができる
    • 秘密鍵を移動させたいときに使われる

ディジタル証明書のチェック方法

  • CA、発行元のディジタル証明書を検証
  • 証明書内の有効期限をチェック
  • 失効情報をチェック
    • CRL
      • CAからダウンロードする
    • OCSP
      • オンライン
      • OSCPレスポンダ(OSCPサーバ)を立て、CRLを取り込む
  • ルートCAの確認
  • 証明書のレベル
    • DV < OV < EV
    • DV
    • OV
      • 企業の実在性を確認
    • EV
      • 最も厳しい審査基準
  • 入力されたFQDNとコモンネームのチェック

SSL/TLSのバージョン

  • SSL2.0
  • SSL3.0
  • TLS1.0~TLS1.1
    • 例外的に利用可能
  • TLS1.2
    • ギリOK
    • 使用できる暗号化を大幅に強化
  • TLS1.3
    • ハンドシェイク時のデータを暗号化する仕組みに変更
    • 現在の一推し

SSL/TLSの通信手順

  • Hello Requestの交換
    • クライアント側が使用可能な暗号化アルゴリズムや圧縮方式を通知
    • サーバ側でそのうちの一つの組み合わせを選択し決定
  • サーバからクライアントにメッセージ送信
    • サーバからディジタル証明書を送信する
    • ディジタル証明書がなければDiffie-Hellmanの鍵交換方式を使用可能
    • Server Hello Doneで終了
  • クライアントからサーバへメッセージ送信
    • サーバの証明書の正当性を確認
    • サーバの公開鍵を用いて生成したマスターシークレットをサーバに送信
    • クライアントからディジタル証明書を送信する
    • Change Cipher Specを送信
  • サーバもChange Cipher Specを送信
  • 暗号化通信の開始

SSL/TLSに対する攻撃

  • ダウングレード攻撃
    • 弱い暗号化スイートの使用を強制
  • バージョンロールバック攻撃
    • SSL2.0等古く弱い旧バージョンの通信を行うように仕向ける
  • BEAST攻撃
    • SSL3.0/TLS1.0のCBCモードの脆弱性を利用して選択平文攻撃を行いCookieを得る
    • TLS1.1で改善
  • POODLE攻撃
    • SSL3.0にあるブロック暗号上のパディングに関する設計上の脆弱性

TLS1.2からTLS1.3への変更点

  • 危殆化した暗号化の削除
  • ハッシュ関数はSHA-256が必須に
  • ServerHello以降のハンドシェイクパラメータを暗号化
  • 1-RTTでハンドシェイクが完了

HSTS

  • HTTP Strict Transport Security
  • Webサイトがブラウザに対してHTTPSの使用を強制
  • HTTP要求の応答にStrict-Transport-Securityを指定
  • プリロードHSTS
    • 最初の要求からHSTSが機能する

ディジタル証明書の利用

  • サーバ証明書
  • クライアント証明書
  • S/MIME
  • コードサイニング証明書
    • ソフトウェアの正当性を証明する

時刻認証で証明できること

  • 存在性証明
  • 完全性証明

時刻認証のインフラ

  • TSA(Time Stamp Authority:時刻認証局
  • TAA(Time Assessment Authority:時刻配信局)

時刻認証方式

時刻認証の手順

  • ディジタル証明書方式
    • TSTの発行
    • TSTの検証
    • アーカイビング方式
      • ハッシュ値と正確な時刻から作成したトークンをTSAで保存
      • TSAに都度問い合わせて確認
      • TSAに保存されている限り正当性の確認が可能
        • 長期間保存義務の電子データの保存に向いている
      • TSA内に保管しているトークンが改ざんされてしまうと有効性を証明できなくなる
        • 保管している全データのハッシュ値を取り、定期的に利用者に公開することで対応

長期署名

  • RFC3126
    • 長期署名フォーマット
  • ES
    • 電子文書
  • ES-T
    • ESにタイムスタンプを付与
  • ES-A
    • ES-Tにパス中の各証明書や失効情報や検証情報を加え、タイムスタンプを付与