本文へ移動
試験

  1. 高校情報
  2. 読んで分かる ITパスポート・基本情報
  3. セキュリティ
  4. 第5章 実装技術

セキュリティ 第5章 テクノロジ系・大分類:技術要素

実装技術

通信・ネットワーク・データベース・アプリケーションに組み込む守りの技術。

閉店後のこむぎ堂。店長が、通販サイトの注文画面を印刷した紙を作業台に広げていました。「来月から、予約も通販も会員登録をしてもらう形に変える。名前も住所も電話番号も、うちが預かることになる」。ミナトは紙の余白に1本の線を引きました。お客さんのスマートフォンから、Wi-Fiとインターネットを通って、店のサーバへ。注文はデータベースにしまわれ、確認のメールがお客さんへ送り返されます。「鍵って、どこにかければいいんでしょう。入口に1つで足りますか」。相棒の返事は短いものでした。「線の上を、データと一緒に歩いてみよう。立ち止まる場所ごとに、狙われ方が違うから」。

お客さんのスマートフォンから、Wi-Fi、インターネット、店のサーバ、データベース、確認メールへと続く1本の線に、通信・ネットワーク・データベース・アプリケーションの4か所の鍵が付いている図
図:注文のデータが通る道と、鍵をかける場所

暗号や認証の仕組みを知っていても、それだけでお客さんの住所は守れません。仕組みは、データが通る場所に組み込まれて、はじめて働きます。通信の途中、店のネットワークの境目、データの置き場所、注文を受け付けるプログラム。ミナトの線の上には、性質の違う場所がいくつも並んでいて、それぞれに別の技術が使われています。

5-1セキュアプロトコル

土曜の朝、常連のお客さんから電話がかかってきました。「予約のページを開いたら、アドレスの横に『保護されていない通信』って出たんだけど、大丈夫?」。ミナトが確かめると、トップページは https で始まるのに、予約の入力画面だけが http のままでした。

お客さんのスマートフォンから店のサーバまで、データは何台ものルータを中継して運ばれます。暗号化していない通信は、その途中で読まれても、書き換えられても、送った側にも受け取った側にも分かりません。そこで、通信の決まり(プロトコル)の側に暗号化の仕組みを組み込みます。盗聴や改ざんを防ぐために作られたプロトコルを、まとめてセキュアプロトコルと呼びます。

Webで使われる代表がSSL/TLSです。ブラウザとサーバのあいだの通信を暗号化し、途中で書き換えられていないかを確かめ、サーバ証明書を使って接続先が本物のサーバかどうかを確かめます。古い名前のSSLには次々と弱点が見つかり、いまはどの版も使わないことになっています。その後継として標準化されたのがTLSです。「SSL」と書かれた設定や製品名でも、実際に動いているのはたいてい TLS です。呼び名として「SSL」が残っているので、両方を並べて SSL/TLS と書きます。

HTTP の通信を SSL/TLS で包んだものがHTTPSです。アドレスが https:// で始まり、ふつうは443番のポートを使います。土曜の電話の原因は、予約画面だけがこの包みの外にあったことでした。ミナトは予約画面も HTTPS に切り替え、http で来たアクセスは https のページへ転送する設定にしました。

ここから基本情報!POP3S・SSH・IPSec

TLS の包みは Web 以外にも使えます。メールの受信に使う POP3 は、そのままではパスワードも本文も平文で流れます。これを TLS で暗号化したものがPOP3Sで、ポートは POP3 の110番に対して995番が割り当てられています。

店のサーバを手入れするときは、ミナトが自分のパソコンから遠隔でログインします。そこで使うのがSSHです。コマンドの入力も画面の表示も、パスワードも暗号化して送るので、平文で流れる telnet の代わりに使われます。ポートは22番で、パスワードの代わりに公開鍵で本人を確かめる方式も選べます。

ここまでのプロトコルは、Web やメールといったアプリケーションごとに暗号化します。これに対し、IPSecは、もう一段下の IP のレベルで、パケットそのものを暗号化・認証します。上で動くアプリケーションが何であっても、IP で運ばれる通信はまとめて守られるので、離れた拠点どうしを安全につなぐ VPN(5-3で扱います)によく使われます。IPSec では、役目の違う2つのプロトコルを使い分けます。AH(認証ヘッダ)は、送信元が本物か、途中で改ざんされていないかを確かめますが、暗号化はしません。ESP(暗号ペイロード)は、暗号化と改ざんの検知の両方を受け持ちます。

基本情報の範囲ここまで

通信の途中には、暗号化を忘れやすい区間がもう1つあります。お客さんや店のスタッフが使う Wi-Fi、つまり無線LANです。電波は壁を越えて店の外まで届くので、無線LANの電波そのものも暗号化しておく必要があります。いま基準になっている暗号化の規格がWPA2で、暗号には AES を使います。店のルータの設定画面で、暗号化の方式に WPA2(またはその後継)を選んでおけば、電波を拾われても、鍵を知らない人には中身を読まれません。

ここから基本情報!無線LANの暗号化の世代

店の古いルータの設定画面を開くと、暗号化の欄に「WEP」と表示されていました。WEPは無線LANの初期の暗号化方式で、仕組みに弱点があり、通信を集めれば短い時間で鍵を割り出せることが分かっています。以前のシラバスに載っていた語です。

WEP の弱点を急いで補うために作られたのが WPA で、その暗号化に使われたのがTKIPです。パケットごとに暗号化に使う鍵を変えて WEP の弱点をふさぎましたが、暗号の方式は WEP と同じ RC4 のままで、いまは使わないことが勧められています。

WPA2 が標準にしている暗号化の方式は、AES を使う CCMP です。その後継のWPA3は、接続のときの鍵の取り決めに SAE という方式を取り入れました。WPA2 の家庭向けの設定では、接続のやり取りを盗み取ったあと、パスワードの候補を手元で次々に試す攻撃(辞書攻撃)が成り立ちます。SAE はこの攻撃を難しくしています。ミナトは店のルータを WPA3 に対応した機種に買い替えることにしました。

基本情報の範囲ここまで

5-2認証・認可技術

月曜の昼、常連さんから「こむぎ堂さんから『予約の確認』ってメールが来て、リンクを押しそうになった」と知らせがありました。店はそんなメールを出していません。同じ週に別のお客さんからは、「本物の予約確認メールが、迷惑メールのフォルダに入っていた」と言われました。偽物は届き、本物ははじかれていたのです。

メールの送信者の欄は、はがきの差出人の欄と同じように、送る側が自由に書けてしまいます。「こむぎ堂」と書いてあることは、こむぎ堂が送った証拠になりません。受け取る側でまず働くのが迷惑メールフィルタです。文面や送信元、含まれるリンクなどの特徴から迷惑メールらしさを判定し、別のフォルダに分けたり削除したりします。

ただ、特徴から推し量る以上、判定はときどき外れます。こむぎ堂の本物のメールがはじかれ、偽物が受信箱に届いたのは、その両方の外れ方でした。「このメールは本当にこむぎ堂のサーバから出たのか」を確かめるには、文面の特徴とは別の手がかりが要ります。

迷惑メールを防ぐ技術をまとめてスパム対策と呼びます。迷惑メールフィルタのように受け取る側で判定するもののほかに、差出人のドメインを確かめるもの、送る側の出口をふさぐもの、メールそのものを暗号化・署名するものがあります。

ここから基本情報!迷惑メールを防ぐ技術

受け取る側の判定でよく使われるのがベイジアンフィルタリングです。利用者が「迷惑」「迷惑でない」と仕分けたメールから、単語ごとの出やすさを学び、ベイズの定理で新しいメールが迷惑メールである確率を計算します。使うほど、その人に届くメールに合わせた判定になります。

迷惑な書き込みはメール以外の通知の仕組みにも入り込みます。ブログには、自分の記事から相手の記事へリンクを張ったことを相手のブログに知らせるトラックバックPingという仕組みがあります。知らせを受けたブログには相手の記事へのリンクが自動で表示されるので、宣伝のリンクを大量に送りつける迷惑行為に使われました。

差出人を確かめる手がかりにするのが送信元ドメイン認証です。メールアドレスの @ より後ろのドメイン(komugido.example のような名前)を持つ組織が、「うちのメールはこう見分けてほしい」という情報を DNS に載せておき、受け取る側がそれを照らし合わせます。代表的な方式は3つあります。

  • SPF:送信元のドメインが、自分のメールを送ってよいサーバの IP アドレスを DNS に登録しておく。受信側は、メールを送ってきたサーバの IP アドレスがその一覧にあるかを確かめる。
  • DKIM:送信側のサーバがメールにデジタル署名を付け、署名を確かめる公開鍵を DNS に載せておく。受信側は公開鍵で署名を検証し、送信元のドメインと、途中で改ざんされていないことを確かめる。
  • DMARC:SPF と DKIM のどちらでも、差出人の欄(From)のドメインが確かめられなかったメールをどう扱ってほしいか(何もしない・隔離する・受け取りを拒否する)を、ドメインの管理者が DNS で宣言する。結果の報告を受け取ることもできる。
受信側のメールサーバが、届いたメールについてDNSに3つのことを問い合わせている図。送ってきたサーバのIPアドレスが登録されているか(SPF)、署名が公開鍵で正しく検証できるか(DKIM)、失敗したときにどう扱うか(DMARC)
図:受信側は DNS を見て、差出人のドメインを確かめる

ミナトはこむぎ堂のドメインに SPF と DKIM を設定し、DMARC で「失敗したメールは隔離してほしい」と宣言しました。これで、こむぎ堂を名乗る偽のメールは受信側で見分けやすくなり、本物のメールは本物だと示せるようになります。

送る側の出口にも対策があります。SMTP-AUTHは、メールを送る(SMTP)ときに利用者の ID とパスワードを確かめ、認められた人にだけ送信を許す仕組みです。OP25Bは、インターネット接続事業者(ISP)が、利用者の端末から外部のメールサーバの25番ポートへ直接つなぐ通信をふさぐ対策です。マルウェアに乗っ取られたパソコンが迷惑メールを直接ばらまくのを防げます。ふつうの利用者は、送信専用の587番ポートに SMTP-AUTH で認証してから送るので、困ることはありません。

受信のときの認証にも工夫があります。APOPは、POP3 でメールを受け取るとき、パスワードをそのまま送らず、サーバから届いた毎回違う文字列とパスワードを合わせたハッシュ値を送る方式です(チャレンジレスポンス方式)。ただ、ハッシュに使う MD5 の弱さを突く手口が報告され、いまは POP3S のように通信全体を暗号化する方法が勧められています。

最後に、メールそのものを守る方法です。PGPとS/MIMEは、どちらも公開鍵暗号を使って、メールの本文を暗号化し、電子署名を付けます。違いは公開鍵が本物だと信じる根拠にあります。S/MIME は認証局が発行した証明書(公開鍵基盤)を使い、PGP は利用者どうしが互いの鍵に署名し合って信頼をつなぎます。

基本情報の範囲ここまで

メールで起きたのは、「送ってきたのは誰か」が確かめられないという問題でした。これは認証の問題です。もう1つ、「確かめた相手に、何をしてよいと許すか」を決めることを認可といいます。予約システムには、どちらの場面も出てきます。

ここから基本情報!認可とDNSの署名

お客さんから「予約した日時を、自分が使っているカレンダーのサービスに自動で入れてほしい」と頼まれたとします。そのためにカレンダーの ID とパスワードを店が預かるのは危険です。OAuthを使うと、お客さんはカレンダーのサービスの画面で「こむぎ堂の予約システムに、予定の書き込みだけを許す」と承認します。予約システムが受け取るのは、許された範囲だけで使える許可証(アクセストークン)で、パスワードは店に渡りません。

お客さんがこむぎ堂のサイトへたどり着く手前でも、なりすましは起こりえます。ドメイン名から IP アドレスを調べる DNS の応答を偽物にすり替えれば、正しいアドレスを入力したお客さんを偽のサイトへ連れて行けます(キャッシュポイズニング)。DNSSECは、DNS の応答にデジタル署名を付け、受け取った側が署名を検証することで、応答が本物で書き換えられていないことを確かめられるようにする仕組みです。署名で守るので、問い合わせの中身を暗号化するわけではありません。

基本情報の範囲ここまで

認証が要るのは、インターネットの向こう側だけではありません。店の奥のLANの差し込み口や、スタッフ用のWi-Fiも、つないできたのが誰かを確かめる必要がある場所です。

ここから基本情報!ネットワークにつなぐ前の認証

IEEE 802.1Xは、LANや無線LANにつなぐ端末を、つなぐ前に認証する仕組みを定めた規格です。登場するのは3者で、接続したい端末、端末がつながるスイッチや無線LANのアクセスポイント、そして認証を受け持つサーバです。認証が済むまで、スイッチやアクセスポイントは認証のためのやり取り以外を通しません。認証を受け持つサーバには、RADIUSというプロトコルで動くサーバがよく使われます。

端末と認証サーバのあいだで、実際にどんな方法で本人を確かめるかを運ぶのがEAPです。名前の Extensible(拡張できる)のとおり、いろいろな認証方式を差し替えて使えます。代表的な方式が2つあります。EAP-TLSは、端末と認証サーバがそれぞれデジタル証明書を出し合って、互いを確かめます(相互認証)。PEAPは、まずサーバ証明書だけで TLS の暗号化された通り道を作り、その中で ID とパスワードなどを送って端末側を確かめます。

基本情報の範囲ここまで

5-3ネットワークセキュリティ

「イートインでWi-Fiを使わせてほしい」という声が増えてきました。けれど店のルータには、レジのパソコンも、予約サーバの管理画面を開くノートパソコンもつながっています。店長が聞きました。「お客さん用とお店用って、同じでいいの?」

Wi-Fi のネットワークには、ESSID(SSID)という名前が付いています。アクセスポイントはふつう、ビーコンという信号でこの名前を周りに知らせ続けていて、スマートフォンの一覧に名前が並ぶのはそのためです。存在を周りから見えにくくするステルス機能を無線LANに使ったのが、ESSIDのステルス化(ESSIDステルス)です。ビーコンで名前を知らせるのをやめ、一覧に出ないようにします。もう1つ、接続先の名前を指定せず「どこでもいいからつなぎたい」と呼びかけてくる端末に応答しない設定を、ANY接続拒否といいます。

つなげる機器を絞る方法もあります。MACアドレスフィルタリングは、機器ごとに割り当てられた MAC アドレスを登録し、登録された機器だけを接続させる設定です。ただし MAC アドレスは暗号化されずに電波に乗るので、盗み見て自分の機器のアドレスを書き換えれば、登録された機器になりすませます。

店長の問いへの答えは「分ける」です。お客さん用の Wi-Fi は、店のパソコンとは別のネットワークにし、インターネットにだけ出られるようにします。お客さんの端末がマルウェアに感染していても、レジや予約サーバには届きません。

こむぎ堂の店内のネットワーク図。お客さん用のWi-Fiとお店用のネットワーク(レジ、管理用のノートパソコン)が分かれていて、どちらもルータを通ってインターネットに出る。お客さん用からお店用へ向かう矢印には×が付いている
図:お客さん用とお店用のネットワークを分ける

ここから基本情報!無線LANと、認証してからつなぐ仕組み

電波の暗号化(5-1の WPA2・WPA3)、名前を見えにくくする設定、ネットワークの分離、つなげる端末の制限。無線LANの通信を守り、不正な端末をつながせないための対策をまとめて無線LANセキュリティと呼びます。以前のシラバスに載っていた語です。

駅や店で誰でも使える公衆無線LANは、こむぎ堂のイートイン用 Wi-Fi もその一つです。暗号化されていないものや、パスワードが店内に貼り出されていて誰でも同じ鍵を使えるものもあります。攻撃者が本物と同じ名前のアクセスポイントを置くこともできるので、利用する側は HTTPS のサイトだけを使う、VPN(このあと出てきます)を使うといった備えをします。

より確実なのは、人や端末を認証してからつなぐ方法です。利用者の ID とパスワードや証明書をまとめて管理し、接続のたびに正しい利用者かを判定するのが認証サーバで、5-2の RADIUS サーバがその代表です。認証の結果を使って、つなぐ先のネットワークまで切り替えるのが認証VLANです。スタッフとして認証された端末は店用の VLAN に、認証されなかった端末はインターネットにも出られない隔離用の VLAN に割り当てる、といった使い方をします。

基本情報の範囲ここまで

店のネットワークとインターネットの境目には、ルータが立っています。境目を通る通信を調べ、通してよいものだけを通すのがファイアウォールの役目で、こむぎ堂ではルータがその働きを兼ねています。

ここから基本情報!境目で通信をふるい分ける

ファイアウォールの基本の働きがパケットフィルタリングです。パケットの送信元と宛先の IP アドレス、ポート番号、通る向きなどを規則の表と照らし合わせ、通すか捨てるかを決めます。「外から予約サーバの443番ポートへの通信は通す」「外から店のパソコンへの通信は捨てる」のように書きます。

ここで困るのが返事のパケットです。店のパソコンが外の Web サイトを見に行けば、外からの返事は届かなければなりません。ステートフルインスペクションは、内側から始まった通信を覚えておき、それに対応する返事だけを通す方式です。パケットを1つずつ見るのではなく、通信のやり取りの流れ(状態)を踏まえて判断するので、返事を装って外から入り込むパケットを捨てられます。

境目のルータはもう1つ、アドレスの付け替えもしています。店の中の機器はプライベート IP アドレスを使い、インターネットに出るときにルータがグローバル IP アドレスに付け替えます。これがNAT(ネットワークアドレス変換)です。アドレスだけを付け替える NAT では、同時に外へ出られる台数がグローバル IP アドレスの数までになります。ポート番号まで付け替えて、1つのグローバル IP アドレスを何台もの機器で同時に使えるようにしたのがIPマスカレード(NAPT)です。外から見えるのはルータのアドレスだけなので、店の中の機器のアドレスが外に知られにくくなります。

基本情報の範囲ここまで

境目を固めると、今度は外から入りたい正当な用事が出てきます。店長は、仕入れ先との打ち合わせの合間に、外から予約の状況を確かめたいと言いました。そこで使うのがVPN(仮想私設網)です。インターネットのような誰でも通れる回線の上に、暗号化と認証で仮想的な専用の通り道を作る技術で、店長のノートパソコンと店のネットワークを VPN でつなげば、途中のインターネットでは中身を読まれずに、店の中にいるのと同じように予約の画面を開けます。

ここから基本情報!外からの出入りと、おとり

VPN の中身を作る方法はいくつかあります。拠点どうしをつなぐ VPN には 5-1 の IPSec がよく使われます。外出先の1台からつなぐ用途では、TLS の暗号化を使うSSL-VPNも使われます。ブラウザから使える製品が多く、専用のソフトを入れなくて済む場合があります。

お客さんが開く予約サーバの手前に、もう1台サーバを置く構成もあります。リバースプロキシは、外からの要求を代わりに受け取り、奥にある本物の Web サーバへ中継するサーバです。外から直接見えるのはリバースプロキシだけになり、奥のサーバの構成を隠せます。TLS の暗号化をここでまとめて受け持ったり、要求を何台かのサーバへ振り分けて負荷を分けたりもできます。

守るだけでなく、相手を観察するための仕組みもあります。ハニーポットは、わざと弱そうに見せたおとりのシステムです。本物の情報は置かず、近づいてきた攻撃者の操作を記録して、どんな手口が使われているかを調べます。

基本情報の範囲ここまで

5-4データベースセキュリティ

新しく入ったアルバイトが、予約のパンを渡すために管理画面を開きました。画面には、会員全員の住所と電話番号、これまでの注文の履歴まで並んでいます。アルバイトはミナトに小声で聞きました。「パンを渡すのに、住所って要ります?」

通信を暗号化し、境目を固めても、データの置き場所であるデータベースには、店が預かった情報がすべて集まっています。そこへの出入りが緩ければ、ここまでの守りの意味が薄れます。アルバイトの問いは的を射ていました。予約を受け渡す仕事に要るのは、名前と予約の中身だけです。

データベースの守りは、3つの問いに分けて考えられます。誰に、どこまで見せるか。盗まれたり壊されたりしたとき、どうするか。誰が何をしたかを、あとから確かめられるか。最初の問いには、仕事に必要な分だけの権限を渡す、という考え方で答えます。利用者や役割(ロール)ごとに、どの表のどのデータを、見るだけか、書き換えてよいかを決める仕組みがデータベースアクセス制御です。

ここから基本情報!誰に、どこまで許すか

データベースアクセス制御は、SQL では GRANT 文で権限を与え、REVOKE 文で取り消す形で書きます。権限には種類があります。データを見ることだけを許すのが読取権限で、SQL の SELECT にあたります。読取権限は以前のシラバスに載っていた語で、いまのシラバスでは同じ権限を「参照権限」と呼んでいます。データを書き換えることを許すのが更新権限で、SQL の UPDATE にあたります。SQL では、行を追加する INSERT、行を消す DELETE も、それぞれ別の権限として与えます。

こむぎ堂では、アルバイトの役割には予約の表への読取権限だけを与え、会員の住所や電話番号の列は見えないようにしました(必要な列だけを取り出したビューに権限を与える方法があります)。会員の情報を書き換える権限は、店長とミナトの役割だけに残しています。

基本情報の範囲ここまで

権限を絞っても、残りの2つの問いは残ります。サーバのディスクごと盗まれるかもしれませんし、操作のまちがいで注文の記録を消してしまうかもしれません。そのときのために、データを暗号化して持ち出されても読ませない手、複製から元に戻す手、操作の記録から何が起きたかを確かめる手を用意しておきます。

元に戻す手がデータベースバックアップです。障害やまちがった操作に備えて、データベースの内容を定期的に複製して保存しておきます。同じサーバの中だけに置くと、サーバが壊れたときに一緒に失われるので、別の場所にも保管します。いざというときに本当に戻せるか、ときどき戻す練習もしておきます。

ここから基本情報!盗まれたとき、あとで調べるとき

データベース暗号化は、データベースにしまうデータそのものを暗号化しておく対策です。データベースのファイルやバックアップが持ち出されても、鍵がなければ中身は読めません。データベース製品の機能で、ファイルに書き込むときに自動で暗号化する方式もあります。鍵をデータと同じ場所に置いておくと意味がないので、鍵の保管場所は分けます。

ログの取得は、誰が、いつ、どのデータに、どんな操作をしたかを記録に残すことです。不正なアクセスに気づくためにも、あとで原因を調べるためにも使います。記録を集めて保存し、決まった期間とっておき、ふだんから目を通して怪しい操作を見つけられるようにしておくことをログ管理といいます。

ログは、攻撃者にとって消したい証拠でもあります。ログ情報の保護は、ログが改ざんされたり消されたりしないよう、ログを見たり消したりできる人を限り、別のサーバにも送って複製を残す、といった対策をとることです。ログ管理とログ情報の保護は、データベースに限らない語で、どちらも以前のシラバスに載っていた語です。

基本情報の範囲ここまで

5-5アプリケーションセキュリティ

金曜の夜、予約フォームの備考欄に、「<script>」で始まる文字列が入った予約が届きました。ミナトが管理画面でその予約を開くと、画面の隅に見覚えのない小さな窓が一瞬開いて、消えました。

線の最後にあるのは、注文を受け付けるプログラムそのものです。予約フォームには、誰でも何でも書き込めます。備考欄の文字列は、パンの注文ではなくブラウザに実行させる命令(スクリプト)でした。管理画面がそれを文字として表示せず、そのままページに埋め込んだので、ミナトのブラウザで実行されたのです。第1章で見たクロスサイトスクリプティングの手口です。

このような書き込みを防ぐ対策をまとめてクロスサイトスクリプティング対策と呼びます。中心になるのは、ページに表示する直前に、< や > のような特別な意味を持つ文字を、表示するだけの文字に置き換えることです(エスケープ処理)。<script> は画面に「<script>」と見えるだけで、命令としては動かなくなります。このように、入力された文字列の中の危険な文字を無害な表記に置き換える処理をサニタイジングといいます。

入力をそのまま信用しない、という考え方は、データベースへの問い合わせでも同じです。入力された文字列を組み込んでデータベースへの命令(SQL)を作るプログラムでは、入力に SQL の一部を紛れ込ませて、命令の意味を書き換えられてしまいます。これがSQLインジェクションです。

ここから基本情報!Webのプログラムを安全に作る

SQLインジェクションを防ぐ代表的な方法がプレースホルダ(バインド変数)です。SQL 文の値が入る所を「?」のような記号にしておき、SQL 文の形を先に確定させてから、実行するときに値を当てはめます。当てはめた値はあくまで「値」として扱われるので、中に SQL の記号が含まれていても、命令の一部として解釈されません。

エスケープもプレースホルダも、Web のプログラムを守る手段の一部です。通信の HTTPS 化、入力値の検査、WAF の導入、ログイン状態を正しく管理することなどを組み合わせて、Web アプリケーションへの攻撃に備える対策全体をWebシステムのセキュリティ対策と呼びます。

脆弱性はあとからふさぐより、はじめから作らないほうが確実です。設計とプログラムを書く段階から、脆弱性を生まないように作る手法をセキュアプログラミングといいます。入力の長さや形式を確かめる、エラーの画面に内部の情報を出さない、危険と分かっている関数を使わない、といった決まりごとを積み重ねます。

その決まりごとの代表がメモリの扱いです。プログラムが用意した領域(バッファ)より長いデータを書き込ませ、隣の領域を上書きして乗っ取るのがバッファオーバーフロー攻撃でした。バッファオーバーフロー対策には、書き込む前に長さを確かめる、長さを指定できる安全な関数を使う、といったプログラムの側の対策があります。OS やコンパイラの側にも、メモリの配置を毎回ばらばらにする ASLR、データの領域に置かれた命令を実行させない DEP、書き換えを検知するための目印をスタックに置くスタック保護(カナリア)などの仕組みがあります。

基本情報の範囲ここまで

会員登録が始まれば、お客さんのパスワードも店のサーバに預かることになります。パスワードは、そのままの形では保存しません。第2章のハッシュ関数でハッシュ値に変えて保存し、ログインのときは、入力されたパスワードのハッシュ値と比べます。保存されたデータが漏れても、元のパスワードはすぐには分かりません。

ここから基本情報!パスワードの保存

それでも、ハッシュ値だけでは足りません。同じパスワードからは同じハッシュ値ができるので、よく使われるパスワードとそのハッシュ値の対応表を前もって作っておけば、表を引くだけで元のパスワードが分かります(レインボーテーブルを使う攻撃)。また、同じパスワードを使っている会員どうしは、ハッシュ値も同じになってしまいます。

そこで、会員ごとに違うランダムな文字列をパスワードに付け加えてからハッシュ値を求めます。この文字列がソルトです。同じパスワードでも会員ごとにハッシュ値が変わり、前もって作った対応表も使えなくなります。ソルトは秘密にするものではなく、ハッシュ値と一緒に保存しておきます。

基本情報の範囲ここまで

プログラムを公開する前には、脆弱性が残っていないかを確かめます。作った人の思い込みは、作った人には見えにくいので、確かめる方法は1つに頼りません。

ここから基本情報!脆弱性を見つける・減らす

プログラムに潜む脆弱性を見つけ出す技術をまとめて脆弱性検査技術と呼びます。大きく分けて3つの方法があります。

ソースコード静的検査は、プログラムを動かさずに、ソースコードを読んで調べる方法です。入力をエスケープせずに表示している所や、長さを確かめずにバッファへ書き込んでいる所を、専用のツールで探します。プログラムの動的検査は、実際にプログラムを動かし、さまざまな入力を与えてふるまいを観察する方法です。ファジングは動的検査の一種で、予想外のデータや形式の崩れたデータを大量に自動で与え、プログラムが止まったり、おかしな動きをしたりする所を探します。

見つけるだけでなく、見つけて減らすところまでを含めて脆弱性低減技術と呼ぶこともあります。指す範囲は脆弱性検査技術とほぼ同じです。以前のシラバスに載っていた語です。

最近は、プログラムを動かすのに必要なものを一まとめにした「コンテナ」でサービスを動かすことが増えました。コンテナセキュリティは、コンテナの元になるイメージに脆弱性のあるソフトウェアが含まれていないかを調べる、信頼できる配布元のイメージだけを使う、コンテナに必要以上の権限を与えずホストのOSから切り離しておく、といったコンテナ特有の対策の総称です。

基本情報の範囲ここまで

会員登録を始める前の晩、ミナトはあの日の紙をもう一度広げました。線の上には、鍵の印がいくつも増えています。予約の画面は HTTPS に、店のメールには受け取った側が本物だと確かめられる設定を、お客さん用の Wi-Fi は店用と分け、アルバイトの画面から住所の列が消え、予約フォームは <script> をただの文字として表示するようになりました。店長が紙をのぞき込みました。「入口に1つ、じゃなかったんだな」。

データが立ち止まる場所ごとに、狙われ方が違い、使う技術も違いました。通信には暗号化のプロトコル、ネットワークの境目にはふるい分けと分離、データベースには権限と記録、プログラムには入力を信用しない作り方。どれか1か所が強くても、ほかの場所が開いていれば、データはそこから漏れます。そしてこの線は、店が新しいサービスを足すたびに伸びていきます。来月、会員向けにポイントの仕組みを足したら、線のどこに、何が増えるでしょうか。

この章のふりかえり

この章で印を付けた用語は、暗記カードで覚えられます。

ITパスポートの範囲(16語)を暗記カードで覚える 基本情報まで(67語)を暗記カードで覚える

カードの「カテゴリ」は、この章の節の名前です。同じボタンでもう一度取り込んでも、復習の進み具合は消えません。