ドキュメントとチートシート

作業中に開いておけるクイックリファレンス。すべてのシートをまとめて検索できます。

サイバーセキュリティ

OWASP Top 10 (2021)

Webアプリケーションの最も重大な10のセキュリティリスクと、それぞれの意味。

リスク意味
A01アクセス制御の不備:ユーザーが権限のないデータや操作にアクセスできる状態。
A02暗号化の不備:機密データが強力な暗号化なしに送信または保存されている状態。
A03インジェクション:入力がSQL、シェル、その他のコードとして実行されます。クロスサイトスクリプティングも含みます。
A04安全でない設計:初期段階からセキュリティが考慮されていません。
A05セキュリティ設定の不備:デフォルトのパスワード、公開状態のストレージ、詳細すぎるエラー。
A06脆弱で古いコンポーネント:既知の脆弱性がある古いライブラリ。
A07識別と認証の不備:脆弱なログイン、MFAの未導入、不適切なセッション管理。
A08ソフトウェアとデータの整合性の不備:未検証の更新やパイプライン。
A09セキュリティログと監視の不備:攻撃を検知できない。
A10サーバーサイドリクエストフォージェリ:サーバーをだまして内部アドレスにアクセスさせる。

サイバーセキュリティ

インシデント対応の手順

実際の作業順に学ぶNISTのインシデント対応ライフサイクル。

ステップ行うこと
準備インシデントが起きる前に、計画、連絡先、ツール、バックアップを準備しておきましょう。
検知と分析インシデントを検知・確認し、深刻度を判断する。
封じ込め拡大を阻止する:マシンを隔離し、アカウントやアドレスをブロックする。
根絶マルウェア、バックドア、侵害されたアカウントなど、原因を取り除きます。
復旧安全なバックアップからシステムを復元し、注意深く監視します。
得られた教訓何が起きたかを記録し、再発しないように不備を修正しましょう。

ネットワーク

よく使われるポート

サーバー、スキャン、ファイアウォールルールでよく使うポート。

ポートサービス
20/tcp · FTP dataファイル転送のデータチャネル。暗号化されないため、SFTPを推奨します。
21/tcp · FTPファイル転送の制御。パスワードを平文で送信します。
22/tcp · SSH安全なリモートログインとファイルコピー(SFTP、SCP)。
23/tcp · Telnet暗号化されない旧式のリモートログイン。無効にしてSSHを使用してください。
25/tcp · SMTPメールサーバー間でのメール配信。
53/tcp/udp · DNSドメイン名の検索。
67/udp · DHCPローカルネットワーク上でIPアドレスを割り当てます。
80/tcp · HTTP暗号化されていないWeb通信です。HTTPSにリダイレクトしてください。
110/tcp · POP3メールのダウンロード(旧式、暗号化なし)。
123/udp · NTP時刻の同期。
143/tcp · IMAPサーバー上のメールの読み取り(暗号化なし)。
161/udp · SNMPネットワーク機器の監視。デフォルトのコミュニティ文字列を変更してください。
389/tcp · LDAPActive Directoryなどのディレクトリサービス。
443/tcp · HTTPS暗号化されたWeb通信(HTTP over TLS)。
445/tcp · SMBWindowsのファイル共有。インターネットには絶対に公開しないでください。
587/tcp · SMTP submissionTLSを使ってアプリやメールクライアントからメールを送信する。
993/tcp · IMAPSTLS経由でのメールの読み取り。
1433/tcp · MS SQLMicrosoft SQL Serverデータベース。
3306/tcp · MySQLMySQLおよびMariaDBデータベース。外部に公開しないでください。
3389/tcp · RDPWindowsリモートデスクトップ。よく狙われるため、VPN経由でのみアクセスできるようにしましょう。
5432/tcp · PostgreSQLPostgreSQLデータベース。外部に公開しないでください。
6379/tcp · RedisRedisキャッシュ。パスワードなしで公開されたままになりがちです。
8080/tcp · HTTP alt開発用サーバーやプロキシでよく使われるポート。
27017/tcp · MongoDBMongoDBデータベース。外部に公開しないでください。

ソフトウェア開発

HTTPステータスコード

APIレスポンスやブラウザーのエラーに表示される数値の意味。

コード意味
200 OKリクエストは成功しました。
201 Created新しいリソースが作成されました。
204 No Content処理は成功し、返す内容はありません。
301 Moved Permanentlyアドレスが恒久的に変更されたため、新しいアドレスにアクセスする。
304 Not Modifiedキャッシュされたコピーはまだ最新です。
400 Bad Requestリクエストの形式が正しくないか、無効です。
401 Unauthorizedサインインしていないか、トークンがない、または期限切れです。
403 Forbiddenサインイン済みですが、この操作を行う権限がありません。
404 Not Foundこのアドレスには何もありません。
409 Conflict重複などにより、リクエストが現在の状態と競合しています。
429 Too Many Requestsレート制限に達しました。しばらく待ってから再試行してください。
500 Internal Server Errorサーバーで問題が発生しました。
502 Bad Gateway中継サーバーが、次のサーバーから不正な応答を受け取りました。
503 Service Unavailableサーバーが過負荷状態か、メンテナンスのため停止しています。

ソフトウェア開発

Gitコマンドのチートシート

日々の作業のほとんどをカバーするGitコマンド。

コマンドできること
git clone <url>リポジトリを自分のコンピューターにコピーします。
git status変更内容とステージング済みの内容を確認する。
git add -p変更を確認しながら、部分ごとにステージングする。
git commit -m "message"メッセージを付けてスナップショットを保存します。
git switch -c featureブランチを作成し、そのブランチに切り替えます。
git pull --rebase最新の変更を取得し、その上に自分の変更を再適用します。
git push -u origin featureブランチをアップロードし、追跡を設定する。
git log --oneline --graphブランチを含む履歴をコンパクトに表示する。
git diffまだステージングしていない変更を表示する。
git stash未完了の変更を一時退避します。
git revert <commit>履歴を残しながら、新しいコミットで既存のコミットを取り消す。

クラウドとLinux

Linuxコマンドチートシート

Linuxサーバーで日常的に使うコマンド。

コマンドできること
pwd現在のフォルダーを表示する。
ls -la隠しファイルを含むすべてのファイルを詳細付きで一覧表示します。
cd /var/log別のフォルダーに移動します。
cat file.txtファイルの内容を表示します。
less file.txt長いファイルを1ページずつ表示します。
grep -i error app.log大文字と小文字を区別せず、指定した単語を含む行を検索します。
chmod 755 script.shファイルの権限を変更します。
chown user:group fileファイルの所有者を変更します。
ps aux実行中のプロセスを一覧表示します。
topCPUとメモリの使用状況をリアルタイムで確認する。
df -hディスクの空き容量を表示する。
sudo apt update && sudo apt upgradeDebianまたはUbuntuで更新をインストールします。
ssh user@hostリモートサーバーに接続します。
tail -f /var/log/syslogログファイルへの追記をリアルタイムで表示します。

クラウドとLinux

DockerとKubernetesのコマンド

コンテナをビルド、実行、デバッグし、クラスター上で管理しましょう。

コマンドできること
docker build -t app .このフォルダのDockerfileからイメージをビルドします。
docker run -p 8080:80 appイメージを実行し、ポート80を8080として公開します。
docker ps実行中のコンテナを一覧表示します。
docker logs -f <id>コンテナの出力をリアルタイムで表示します。
docker exec -it <id> sh実行中のコンテナ内でシェルを開きます。
kubectl get pods現在の名前空間のPodを一覧表示します。
kubectl describe pod <name>Podの詳細と最近のイベントを表示する。
kubectl logs <pod>Podのログを表示します。
kubectl apply -f deploy.yamlファイルからリソースを作成または更新します。
kubectl rollout undo deployment/app前のバージョンにロールバックします。

ネットワーク

DNSレコードの種類

DNSゾーンにあるレコードと、それぞれの役割。

レコード目的
A名前をIPv4アドレスに対応付けます。
AAAA名前をIPv6アドレスに対応付けます。
CNAMEある名前を別の名前のエイリアスにします。
MXドメイン宛てのメールを受信するメールサーバーを指定します。
TXTSPF、DKIM、ドメイン所有権の確認に使われる自由形式のテキスト。
NSドメインを管理するネームサーバーを列挙します。
SOASOA(権威の開始):ゾーンの主要設定とシリアル番号。
PTR逆引き:IPアドレスから名前を特定します。
SRV特定のサービスのホストとポートを指定します。
CAA証明書を発行できる認証局を制限します。

ネットワーク

CIDRとサブネットマスクの対応表

プレフィックス長、サブネットマスク、総アドレス数、使用可能なホスト数。

プレフィックスマスク · 総数 · 使用可能数
/8255.0.0.0 · 16,777,216 · 16,777,214
/16255.255.0.0 · 65,536 · 65,534
/20255.255.240.0 · 4,096 · 4,094
/22255.255.252.0 · 1,024 · 1,022
/24255.255.255.0 · 256 · 254
/25255.255.255.128 · 128 · 126
/26255.255.255.192 · 64 · 62
/27255.255.255.224 · 32 · 30
/28255.255.255.240 · 16 · 14
/29255.255.255.248 · 8 · 6
/30255.255.255.252 · 4 · 2
/32255.255.255.255 · 1 · 1

ネットワーク

ネットワークのトラブルシューティングコマンド

接続が途切れる箇所を特定するコマンドです。自分が所有するシステム、またはテストの許可を得たシステムのみを対象にしてください。

コマンドできること
ping -c 4 example.comホストが応答するか、応答にどれくらい時間がかかるかを確認する。
traceroute example.comパケットが宛先までに通過するすべてのルーターを表示します。
dig example.com A名前に対応するDNSレコードを検索します。
nslookup example.comほとんどのシステムで使える、よりシンプルなDNS検索。
curl -I https://example.comWebページのレスポンスヘッダーだけを取得します。
ip addrネットワークインターフェースとIPアドレスを表示します。
ip routeデフォルトゲートウェイを含め、トラフィックの送信先を表示します。
ss -tulpn待ち受けポートと、それらを開いたプログラムを一覧表示します。
nmap -sV 192.168.1.10自分が所有するホストをスキャンし、開いているポートとサービスのバージョンを確認しましょう。
tcpdump -i eth0 port 53インターフェース上のDNSパケットをキャプチャする。

ソフトウェア開発

SQLチートシート

データベース操作の大半を支えるステートメント。ユーザー入力は必ずパラメーターとして渡し、文字列の連結は使わないでください。

ステートメントできること
SELECT name, email FROM users;テーブルから列を読み取る。
SELECT * FROM orders WHERE total > 100;条件で行を絞り込みます。
ORDER BY created_at DESC LIMIT 10結果を並べ替え、先頭の行だけを取得します。
INSERT INTO users (name) VALUES ($1);行を追加します。$1は安全に値が設定されるパラメーターです。
UPDATE users SET name = $1 WHERE id = $2;既存の行を変更します。WHEREを忘れないでください。
DELETE FROM sessions WHERE expires_at < now();条件に一致する行を削除する。
JOIN orders ON orders.user_id = users.id共通の値を持つ2つのテーブルの行を結合します。
SELECT status, count(*) FROM orders GROUP BY status;行をグループ化し、件数や合計を求めます。
CREATE INDEX ON users (email);列の検索を高速化します。
BEGIN; ... COMMIT;複数のステートメントを、すべて成功するかすべて取り消される1つのトランザクションとして実行します。

ソフトウェア開発

正規表現チートシート

テキストの検索や検証に使うパターンです。正規表現テストツールで試してみましょう。

パターン一致
.改行以外の任意の1文字。
\d \w \s数字、単語構成文字、空白文字。
^ $テキストの先頭と末尾。
\b単語の境界。
* + ?直前の要素の0回以上、1回以上、0回または1回の繰り返し。
{2,4}前の項目を2〜4回繰り返す。
[abc] [^abc]指定した文字のいずれか、または指定していない任意の文字。
(cat|dog)catまたはdogにマッチし、その内容を記憶するグループ。
(?:cat|dog)内容を記憶しないグループ。
(?=x)先読み:直後にxが続く場合にのみマッチし、x自体は消費しません。

クラウドとLinux

Bashスクリプトの基礎

自動化に使うシェルスクリプトの基本構成要素。

構文意味
#!/usr/bin/env bash最初の行:スクリプトを実行するプログラムを指定します。
set -euo pipefailエラー、未設定の変数、パイプラインの失敗時に停止します。より安全なデフォルト設定です。
name="web01"; echo "$name"変数を設定して使用します。スペースを正しく扱うため、引用符で囲みましょう。
if [ -f "$file" ]; then ... fi条件が真の場合にのみコマンドを実行します。ここではファイルが存在する場合です。
for f in *.log; do ... doneリストの各項目に対してコマンドを繰り返す。
cmd1 | cmd2あるコマンドの出力を別のコマンドに渡します。
cmd > out.txt cmd >> out.txt出力をファイルに書き込み、上書きまたは追記します。
$?直前のコマンドの終了コード。0は成功を意味します。
cmd1 && cmd2 cmd1 || cmd2最初のコマンドが成功した場合のみ、または失敗した場合のみ、2つ目を実行します。
chmod +x script.sh && ./script.shスクリプトを実行可能にして実行します。

クラウドとLinux

Cronスケジュールの構文

5つのフィールド:分、時、日、月、曜日。Cron解説で試してみましょう。

式実行回数
* * * * *毎分。
*/15 * * * *15分ごと。
0 * * * *毎時0分。
0 2 * * *毎日02:00。
30 9 * * 1-5月曜日から金曜日の平日、09:30。
0 0 1 * *毎月1日の深夜0時。
0 0 * * 0毎週日曜日の深夜0時。
0 8,20 * * *1日2回、08:00と20:00。

クラウドとLinux

Linuxのパーミッションモード

よく使うchmodの値と使いどころ。読み取りは4、書き込みは2、実行は1です。

モード意味
777 rwxrwxrwx誰でもすべての操作ができます。適切な設定であることはほぼありません。
755 rwxr-xr-x所有者はフルアクセス、その他は読み取りと実行が可能。プログラムやフォルダーで一般的です。
750 rwxr-x---所有者はフルアクセス、グループは読み取りと実行が可能、その他はアクセス不可。
700 rwx------所有者のみアクセス可能。プライベートフォルダーに適しています。
664 rw-rw-r--所有者とグループは編集可能、その他は読み取り可能。
644 rw-r--r--所有者は編集可能、全員が読み取り可能。Webファイルで一般的です。
640 rw-r-----所有者は編集可能、グループは読み取り可能。パスワードを含む設定ファイルに適しています。
600 rw-------所有者のみ読み書き可能。SSH秘密鍵に必要です。
400 r--------所有者のみ読み取り可能。変更しない鍵に適しています。

サイバーセキュリティ

WebセキュリティヘッダーとCookieフラグ

ブラウザーに安全性を高める動作を強制するレスポンスヘッダー。

ヘッダーまたはフラグ保護対象
Content-Security-Policyスクリプト、画像、フレームの読み込み元を制限します。XSSに対する強力な保護になります。
Strict-Transport-Securityこのサイトへの接続に常にHTTPSを使用するようブラウザーに指示します。
X-Content-Type-Options: nosniffブラウザーによるファイル形式の推測と、偽装されたスクリプトの実行を防ぎます。
X-Frame-Options: DENY他のサイトがあなたのサイトをフレーム内に表示することを防ぎます(クリックジャッキング対策)。
Referrer-Policy他のサイトに送信されるアドレス情報の範囲を制御します。
Permissions-Policyそのページでカメラや位置情報などのブラウザー機能を無効にします。
Set-Cookie: HttpOnlyJavaScriptからCookieにアクセスできなくし、XSSによる窃取を防ぎます。
Set-Cookie: SecureCookieをHTTPS経由でのみ送信します。
Set-Cookie: SameSite=LaxクロスサイトリクエストでのCookie送信を制限し、CSRFを軽減します。
Access-Control-Allow-OriginCORS:APIのレスポンスを読み取れる他のウェブサイトを指定します。

サイバーセキュリティ

暗号技術の早わかり

用途別に使うべきアルゴリズムと、避けるべきアルゴリズム。

アルゴリズム概要と使用場面
AES-256-GCM保存中および転送中のデータを高速に暗号化する共通鍵暗号。同じ鍵で暗号化と復号を行います。
ChaCha20-Poly1305最新の対称暗号。AESハードウェア支援のないスマートフォンに適しています。
RSA 2048+公開鍵暗号と署名。処理が遅いため、主に鍵交換に使われます。
ECDSA / Ed25519RSAより小さい鍵を使うコンパクトな公開鍵署名。
Diffie-Hellman公開通信路で双方が共有秘密を合意できます。
SHA-256フィンガープリントや完全性の確認に使う暗号学的ハッシュ。パスワード用ではありません。
HMAC秘密鍵を組み合わせたハッシュで、メッセージが改ざんされていないことを証明します。
bcrypt / Argon2パスワード保存用に設計された、計算に時間がかかるソルト付きハッシュ。
TLS 1.3HTTPSを支えるプロトコル。これを使用し、古いバージョンは無効にしましょう。
MD5 / SHA-1セキュリティ用途では安全性が破られています。署名やパスワードには絶対に使用しないでください。

サイバーセキュリティ

よくある攻撃の用語集

よく耳にする攻撃を、わかりやすい言葉で解説します。

攻撃概要
フィッシングパスワードを教えたり、有害なリンクをクリックしたりするよう人をだます偽のメッセージ。
ランサムウェアファイルをロックし、解除するための金銭を要求するマルウェア。
DDoS多数のマシンから大量の通信をサービスに送り、正規のユーザーがアクセスできなくすること。
中間者攻撃通信する双方の間に密かに入り込み、メッセージを読み取ったり改ざんしたりすること。
ブルートフォース攻撃成功するまで大量のパスワードを試すこと。
クレデンシャルスタッフィング流出したユーザー名とパスワードの組み合わせを、ほかのサイトで試すこと。
ゼロデイベンダーがまだ把握しておらず、パッチが存在しない脆弱性を狙う攻撃。
サプライチェーン攻撃サプライヤーやソフトウェアパッケージを侵害して、その顧客を攻撃する。
権限昇格制限付きのアクセス権限から管理者権限へ昇格すること。
ソーシャルエンジニアリングコンピューターではなく人を操ってアクセスを得る手法。
内部脅威正当なアクセス権を持つ人が、意図的または偶発的に引き起こす被害。

サイバーセキュリティ

MITRE ATT&CKの戦術

攻撃者がたどる14の段階。防御側の共通言語となります。

戦術攻撃者の目的
偵察対象に関する情報を収集する。
リソース開発攻撃に使用するインフラ、アカウント、ツールを準備する。
初期アクセスフィッシングなどを通じて、最初の侵入の足がかりを得る。
実行システム上で悪意のあるコードを実行する。
永続化再起動やパスワード変更後もアクセスを維持します。
権限昇格より高い権限を取得する。
防御回避検知やブロックを回避する。
認証情報へのアクセスアカウント名とパスワードを盗む。
探索環境とその中にあるものを把握します。
ラテラルムーブメントあるシステムからネットワーク上の他のシステムへ移動する。
情報収集目的のデータを収集する。
指揮統制侵害したシステムと通信し、指示を送る。
データ持ち出しネットワークからデータを持ち出す。
影響システムやデータを妨害、破壊、またはロックする。