20210425
- AtCoder
- 休んでる間のABCとARCの300, 400点問題埋め
- ARC 114
- A Not coprime
- 難しいこと考えずにできるときは全探索!
- 計算量の見積もりができない……
- A Not coprime
- B Special Subsets
- 解法も実装もサッパリ
- 特にサイクル数を求める実装は要復習
- ABC 196
- C Doubled
- 難しいこと考えずにできるときは全探索!
- よく考えたらでいけた…
- 難しく考えてで解いた
- D Hanjo
- DFS理解してない&実装できないのがばれる
- 解答例
>>
とかよくわからんのがいくつかあったけどPythonでのビット演算だった - 当たり前だけど
global
で宣言する変数はグローバルで定義しないといけないから、いつものようにmain()
で実行するならその外側で定義する必要あり
- C Doubled
- ARC 114
- 休んでる間のABCとARCの300, 400点問題埋め
- 『テスト駆動開発』
- 第Ⅰ部 他国通貨
- TDDの本質は「テストに通る」という「正解」の状態をキープする、または、外れてもすぐそこに戻るように(ステップが小さくても)確実に正しいコードを書き続けること
- ゆえにテストは必ず「正解」でなければならない
- そのためのテストファースト
- 第Ⅰ部 他国通貨
20210424
- AtCoder
- ABC 199
- 二か月ぶりの参戦予定だったが起きたら21:30だったので断念
- 休んでる間のABCとARCの300, 400点問題埋め
- ARC 113
- C String Invasion
- 最大となる作戦は分かっても実装ができなかった
- C String Invasion
- ABC 193
- C Unexpressed
- 簡単だった
- setの復習
not in
はsetが速い{}
は空の辞書、空のsetはset()
で初期化- 足すときは
|
- D Poker
- 難しいこと考えずにできるときは全探索!
- あとは丁寧に実装するだけだった
- C Unexpressed
- ABC 194
- C Squared Error
A
で全探索するだけ- 数学使えばで行けると思う
- D Journey
- ただの算数
- C Squared Error
- ABC 195
- C Comma
- ただの算数
- D Shipping Center
- 最大値を得る方法が簡単な問題だったがDPを使うと思ってしまい、解けなかった(実装は簡単だった)
- C Comma
- ARC 113
- ABC 199
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認証
- セッション管理
- クエストリングにセッションIDを含める
- GETメソッド
- URLの後の?に続ける
- POSTメソッド
- GETメソッド
- hiddenフィールドにセッションIDを含める
- Cookie
- 安全な利用方法
- 推測しにくいセッションID
- 適切なdomain属性
- 適切な有効期限
- Expires:日時を設定
- Max-Age:秒を設定
- Secure属性
- httpsのみ
- HttpOnly属性
- JavaScriptはNG
- 安全な利用方法
- 攻撃と対応策
- 攻撃
- セッションハイジャック
- セッションIDを盗聴、推測することによるなりすまし
- セッションフィクセーション
- HTTPヘッダインジェクション
- クエストリングに不正なコードを挿入する
- 対応策
- 改行コード(CRLF)
- 改行コードを無効化、改行後を削除
- セッションハイジャック
- 攻撃
- クエストリングにセッションIDを含める
- WAFの導入
- オープンリダイレクト対策
- リダイレクト先のホワイトリスト
- クロスドメイン
- Same-Originポリシ
- JSONP
- 危険
- CORS
- Cross-Origin Resource Sharing
- XMLHttpRequest
DNSサーバ
プロキシサーバ
- 目的
- 端末を隠蔽
- 一元管理
- アクセスログチェック
- URLフィルタリングソフト
- アンチウィルスソフト
- 認証機能
- 標的型攻撃の出口対策
DBサーバ
- 表領域暗号化
- 透過的暗号化
- 利用者側は意識しない
- 透過的暗号化
- バックアップデータの暗号化
- APとDBサーバ間の通信経路の暗号化
セキュリティ対策
- 境界防御
- ゲートウェイセキュリティ
- エンドポイントセキュリティ
- EPR
- Endpoint Protection Platform
- 防前対策
- 各種アンチウイルスソフト
- EDR
- Endpoint Detection and Response
- 事後対策
- EPR
3. ファイアウォール・IDS・IPS・UTM
ファイアウォールの種類及び方式
- パケットフィルタリング型
- ルータ同様、IPパケットを通過させるか判断する
- ダイナミックパケットフィルタリング
- リクエストパケットに対応する戻りのパケットだけ通過させる
- ゲートウェイ型
- ゲートウェイとして機能
- サーキットレベル
- アプリケーション
- アプリケーションレベルでの制御が可能
- パーソナルファイアウォール
- クライアント端末だけを守る
- WAF
- ステートフルパケットインスペクション機能
- ダイナミックパケットフィルタリングの高機能版
- ACL
- 運用
- ペネトレーションテスト
- ログの確認
- インシデント発生時の被害状況の確認
- ログを確認し、外部C&Cサーバとの通信が成功して情報が持ち出されたかどうか判断する
- パケットフィルタリング型FWで防げない攻撃
- L7ファイアウォール
- アプリケーションレベルで判断するファイアウォール
- UTMと遜色ない
IDS
- 種類
- HIDS
- ホスト型
- 監視対象のホストにインストール
- 機能
- 対象ホストのログファイルを監視
- ホストが受信する送受信パケットを監視
- ファイルの不正な改ざんを監視
- NIDS
- ネットワーク型
- 監視対象のネットワークセグメントに設置
- 機能
- プロミスキャスモード
- 自分宛でないパケットもすべて取得する
- ステルスモード
- IPアドレスを振らない
- SW-HUBには、モニタリングポートに接続
- プロミスキャスモード
- HIDS
検知の仕組み
- Misuse検知
- Anomaly検知
- アノマリ検知型
- 正常となるパターンを登録し、正常動作から離れた動きをするものを異常として検知する
- 異常な数のパケットに強い
- 仕様に反したパケットに強い
IDSの問題点
- 検知できるが侵入はされる
- false positive
- false negative
2. PKI
ディジタル署名の仕組み
PKI
- CA
- 認証局
- RAとIAを包含する
- RA
- 登録局
- 申請を受け付けて、承認や認可を行う
- IA
- 発行局
- ディジタル証明書やCRLの発行を行う
- CSR
- CAに提出する証明書署名要求
- CP/CPS
- 申請
- 鍵ペアを生成
- CSRを作成し、CAに申請
- CAがディジタル証明書を発行
- 確認
ディジタル証明書の形式
ディジタル証明書のチェック方法
- CA、発行元のディジタル証明書を検証
- 証明書内の有効期限をチェック
- 失効情報をチェック
- CRL
- CAからダウンロードする
- OCSP
- オンライン
- OSCPレスポンダ(OSCPサーバ)を立て、CRLを取り込む
- CRL
- ルートCAの確認
- 証明書のレベル
- DV < OV < EV
- DV
- ドメインだけを確認
- OV
- 企業の実在性を確認
- EV
- 最も厳しい審査基準
- 入力されたFQDNとコモンネームのチェック
SSL/TLSのバージョン
- SSL2.0
- SSL3.0
- 禁止
- 脆弱性
- POODLE
- 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攻撃
- 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が機能する
ディジタル証明書の利用
時刻認証で証明できること
- 存在性証明
- 完全性証明
時刻認証のインフラ
- TSA(Time Stamp Authority:時刻認証局)
- TAA(Time Assessment Authority:時刻配信局)
時刻認証方式
時刻認証の手順
- ディジタル証明書方式
- TSTの発行
- TSTの検証
- アーカイビング方式
長期署名
- RFC3126
- 長期署名フォーマット
- ES
- 電子文書
- ES-T
- ESにタイムスタンプを付与
- ES-A
- ES-Tにパス中の各証明書や失効情報や検証情報を加え、タイムスタンプを付与
- アーカイブタイムスタンプ
- ES-Tにパス中の各証明書や失効情報や検証情報を加え、タイムスタンプを付与