基本情報技術者4
問題一覧
1
さて、メールをやり取りするにはメールアドレスを宛先として指定するわけですが、この
宛先がよく見てみると数種類用意されていたりします。
実は電子メールというのは、その目的に応じて3種類の宛先を使い分けできるようになっているのです。それぞれの意味というのは次のような感じ。
TO
本来の意味の「宛先」です。送信したい相手のメールアドレスをこの欄に記載します。
СС
Carbon Copy(カーボンコピー)の略で、「参考までにコピー送っとくから、一応アナタも見といてね」としたい相手のメールアドレスをこの欄に記載します。
BCC
Blind Carbon Copy(ブラインドカーボンコピー)の略で、「他者には伏せた状態でコピ一送っとくから、一応アナタも見といてね」としたい相手のメールアドレスをこの欄に記載します。
1対1でメールのやり取りをしている時には、TO以外の宛先を意識することはまずありません。じゃあどんな時に使うかというと、「複数の宛先にまとめてメールを送信したい時」
に使います。このように、同じメールを複数の相手に出すやり方を、同報メール、と呼びます。
2
電子メールの送信には、SMTPというプロトコルを使用します。
たとえば電子メールを実際の郵便に置きかえて考えると・
ポストに入れる
郵後屋さんが運ぶ
郵便受けに届く
ポストから、相手の郵便後けに届けるまでがSMTPの役割となります。
このSMTPに対応したサーバのことをSMTPサーバと呼びます。
SMTPサーバには、次のような2つの仕事があります。
①送信されたメール本文を受け取る。
②相手先のメールサーバへとメールを配送します。
3
一方、電子メールを受信するには、POPというプロトコルを使用します。
先ほどと同じく実際の郵便に置きかえて考えると・郵便受けから電子メールを取り出すのがPOPの役割となります。
このPOPに対応したサーバのことをPOPサーバと呼びます。
POPサーバは、電子メールソフトなどのPOPクライアントから「受信メールくださいな」と要求があがってくると、そのユーザのメールボックスから、受信済みのメールを取り出して配送します。現在は「POP Version3」を意味するPOP3が広く使われています。
4
IMAP (Internet Message Access Protocol)は、POPと同じく電子メールを受信するためのプロトコルです。
POPとは異なり、送受信データをサーバ上で管理するため、どのコンピュータからも同じデータを参照することができます。現在はIMAP4というバージョンが広く用いられています。
5
これまで取り上げてきた、SMTP、POP、IMAPという電子メール用のプロトコルは、いずれもネットワーク上を無防備な素のデータとしてやり取りします。
そこで、SSL/TLS という暗号化プロトコルを用いることにより、サーバとの間の通信経路を安全にやり取りできるようにしたのが次のプロトコルたちです。
電子メールでは、本来ASCII文字しか扱うことができません。そこで、日本語などの複数バイト文字や、画像データなどのファイルを添付できるようにする拡張規格がMIME(Multipurpose Internet Mail Extensions) です。当然そのままでは本来の文と区別がつかなくなるので、メールをパートごとに分けて、どんなデータなのか種別を記します。受信側はこの種別を元に、各パートを復元して参照する。
このMIMEに、暗号化やデジタル署名の機能を加えた規格としてS/MIMEがあります。メール本文を暗号化することで、盗聴や改さんの危険から守り・
デジタル署名によってなりすましを防止します
6
現在、電子メールの本文を記述するメッセージ形式には、テキスト形式とHTML形式の2種類があります。
テキスト形式
・文字だけで構成されるメール形式
・一般的に使われているのはこれ
・多くの環境で問題なく読んでもらえる
HTML形式
・Webページの記述に用いられるHTMLで本文を作成するメール形式
・Webページ同様にタグが使えるため、文字の英師や画像の埋込、リンクの設定
など、見栄え良く本文を構成することができる。
・受信側もHTML形式に対応していないと、意図した通りに表示されない
もともと電子メールというのは、MIMEの項でも述べた通り、テキスト形式のみ…・それも最もシンプルなASCII文字に限られていました。そこにMIMEなどの拡張が施されてより多<の文字が扱えるようになり、さらに「より表現力を」という要を満たす形で開発されたのがHTML形式のメールです。
HTML形式であるため、Webページと同じく文字の装飾や本文内に画像を配置するなどの多様な表現力を持ちますが、その一方で関覧時には、本文内に悪意のあるスクリプトが埋め込まれていて自動実行される可能性や、内装Webサイトへ誘導するフィッシング詐欺被害に合うなどの危換性に留意する必要があります。
7
電子メールの便利なところは、相手のデバイスを意識せずにメールのやり取りができることです。考えてみれば、世界中の誰かさんとインターネットでつながって、相手が何を使ってメールを読むのかも知らないままやり取りできちゃう。これってすごいことですよね。
ただ、そこでちょっと思い出して欲しいのが文字コードの話。
文字コードには色んな種類がありますから、あるコンピュータで表示できる文字だからといって、それが他のコンピュータでも表示できるとは限らないのです。
このように、特定のコンピュータでしか表示できない文字のことを機種依存文字と呼びます。
機種存文字には次のようなものがあります。あと、厳密には機種依存文字ではないのですが、半角カナ(アイウエオみたいなの)も同じく文字化けの原因になりますので、ともにメールでの使用は控えた方が無難です。
8
IoTとはInternet of Thingsの略。「モノのインターネット」と訳されています。モノのテジタル化・ネットワーク化が進んだ社会のような意味だと捉えれば良いでしょう。
かつてはコンピュータ同士を広く接続するインフラとして用いられていたインターネットですが、スマートフォンやタブレットなどの情報端末、テレビやBDレコーダーなどのデジタル家電にはじまり、今ではスマート家電や各種センサーを搭載した様々な”モノが、インターネットに接続されるようになりました。
こうした数多くのモノが、そのセンサーによって見聞きしたあらゆる事象は、インターネット上に「ビッグデータ」と言われる勝大な「数値化されたデジタル情報」を日々生み出し続けています。あまりに膨大すぎて人の手にはあまるので、このビッグデータの活用には、
・人工知能(Al)技術が欠かせません。その一方で、人工知能技術自体の発達にも、ビッグデータが一役も二役も買っているのが面白いところです。
IoT社会の現代において、ビッグデータと人工知能の組み合わせは、デジタル技術をさらに躍進させる存在として注目を浴びています。
9
「とにかく膨大」なデータだからビッグデータ。どこからがじゃあビッグなのかというと、典型的なデータベースソフトウェアが把握し、蓄積し、運用し、分析できる能力を超えたサイズのデータを指すとされています。
このビッグデータが持つ大きな特性が、次に挙げる「3つのV」です。
Variety(多様性)
データベースで扱いやすい
ように整形された構造化データだけでなく、画像や音声、動画などの多種多様な非構造化データもその対象に含む
Velocity (頻度)
SNSのような、不特定多数の個人が発信する乱雑なデータ
刻一刻と変化する株価などのマーケット情報
各種センサーから得られるリアルタイムデータなど
リアルタイムで取得データなど、大量の変動データを含む
Volume (量)
これらを分析する際は、一部を抜き出して対象とするようなサンプリングは行わず、デー夕全体を対象に統計学的手法を用いて行います。大量のデータを統計的、数学的手法で分析し、法則や因果関係を見つけ出す技術を、データマイニング、と言います。
10
AIの学習方法には主に3つある。
教師あり学習
データと正解をセットにして与える(もしくは誤りを指摘する)
教師なし学習
データを大量に与えることで、特徴を見つけて分類できるようにならせる
強化学習
個々の行動に対する善し悪しを得点として与えることで、得点が最も多く得られる方策を学習する手法
11
世界中アチコチにつながっているインターネット。企業のネットワークをこいつにつなぐと確かに便利なのですが、それは同時に「外部ネットワークに潜む悪意ともつながる」という
危険性をはらんでいます。
たとえば外部の人間・特に悪意を持った人間が自社のネットワークに侵入できてしまうとどうなるか。情報の漏洩はもちろん、重要なデータやファイルを破壊される恐れが出てきます。また、優入を許さなかったとしても、大量の電子メールを送りつけたり、企業Webサイトを繰り返しリロードして負荷を増大させたりとすることで、サーバの処理能力をパンクさせる妨害行為なども起こりえます。
考えてみれば、事務所に泥棒が入れば大変ですし、FAXを延々と送りつけてきて妨害行為を働くなんてのも古くからある手法ですよね。そのようなことと同じ危険が、ネットワークの中にもあるということなのです。
悪意を持った侵入者は、常にシステムの脂弱性という穴を探しています。これらの脅威に対して、企業の持つ情報資産をいかに守るか。それが情報セキュリティです。
12
組織が自身の情報資産を適切に管理し、それらを守るための仕組みが情報セキュリティマネジメントシステム(ISMS)です。情報セキュリティの3要素(機密性、完全性、可用性)をバランス良く維持・改善していくことを目的とします。
この情報セキュリティマネジメントシステムを、どのように構築し、維持・改善していくべきかを定めた規格がISO/IEC 27001 (JIS Q 27001)で、
組織が構築した情報セキュリティマネジメントシステムが、この規格に基づいて適切に構築・運用されているかを証明するのが、第三者であるISMS認証機関が審査して認証を行うISMS適合性評価制度です。ここでISMS認証を受けた組織は、情報資産を適切に管理する仕組みを有してますよとなるわけです。しかし情報セキュリティ対策は、一度行ったら終わりというわけではありません。この分野は常に新しい音威に対して備える必要があるため、PDCAサイクルに基づいて継続的な見直しと改善のプロセスを繰り返すことが求められます。
13
情報セキュリティは、「とにかく穴を見つけて片っ端からふさげばいい」というものではありません。たとえば次のように穴をふさいでみたとしましょう。
パスワードは3重に、かつ指紋認在、声認証、虹彩認証をパスした人だけがネットワークにアクセスできます、と言うふうに。しかし、このように「セキュリティのためた」と堅牢なシステムにすればするほど、今度は「使いづらい」という問題が出てきてしまいます。そもそも「安全最優先」と言うのであれば、そこでつながってるLANケーブルを引っこ抜いちゃえばいいのです。でも、それだとネットワークの利便性が享受できないからよろしくない。じゃあ、安全性と利便性とをどこでバランスさせる
か・。これがセキュリティマネジメントの基本的な考え方です。
14
そんなわけで情報セキュリティは、次の3つの要素を管理して、うまくバランスさせることが大切だとされています。
機密性
許可された人だけが情報にアクセスできるようにするなどして、情報が漏洩しないようにすることを指します。
完全性
情報が書き換えられたりすることなく、完全な状態を保っていることを指します。
可用性
利用者が、必要な時に必要な情報資産を使用できるようにすることを指します。
15
近年は「機密性」、「完全性」、「可用性」の3要素に加えて、「真正性」「責任追跡性」「否認防止」「信頼性」という4つの要素を含む「情報セキュリティの7要素」が提唱されています。
これらを意識することで、さらに情報セキュリティを高めることができます。
各特性はISO 27000規格の用語定義で次のように記されています
※責任追跡性のみ特に定義がありません。
真正性(authenticity)
エンティティ(実体・主体)は、それが主張するとおりのものであると言う特性。例)🐙タコです。疑いの余地なく
青任追跡性(accountabillity)
accountabilityは「説明責任」という意味。いつ、だれが、何をしたのかを特定・追跡できる特性。
否認防止(non-repudiation)
主張された事象又は処置の発生、及びそれらを引き起こしたエンティティ(実体・主体)を証明する能力。
信頼性(reliability)
意図する行動と結果とが一貫しているという特性。
16
さて、色々検討した末に、「ウチの情報セキュリティは、こんな風にして守るべきだぜ」と思い至ったとします。でも、思っているだけでは何も反映されません。
そこで、組織の経営者(トップマネジメント)が、企業としてどのように取り組むかを明文化して、従業員および関連する外部関係者に周知・徹底するわけです。これを、セキュリティポリシ(情報セキュリティ方針)と呼びます。
セキュリティポリシは基本方針と対策基準、実施手順の3階層で構成されています。
①基本方針
情報セキュリティに対して、企業としての基本方針を定める。
というわけだから、我が社はこれこれこーで取り組むべきだ
②対策基準
上の方針を実現化するために。
行うべき対策や基準を定める。
それではコレとアレとソレを、やらなくてはなりますまい
③実施手順
業務の中でどのように実施していくかの
具体的な手順を定める。
詳細な運用マニュアルとか
作りますね
17
情報セキュリティの目的はなにかというと、「情報資産をリスクから守る」ことに尽きます。
では、リスクとは具体的に何でしょう?
情報セキュリティにおける「リスク」とは、「組織が持つ情報資産の脆弱性を突く脅威によって、組織が損害を被る可能性のこと」を指します。
リスクマネジメントは、経営層(トップマネジメント)が責任を負い、業務の一環として役割を分担しながら、全社的に取り組むものです。
18
リスクは小さなものから大きなものまで多種多様にあるものです。それらすべてに対応できれば理想的でしょうが、それでは費用対効果が悪くてしょうがないので、取捨選択を行う必要があります。そこで出てくるのがリスク受容基準です。
リスクマネジメントでは、この受容基準におさまらないリスクを洗い出し、適切に管意しなくてはいけません。そのために行われるのが、次に示す4つのプロセスです。
①リスク特定
リスクを洗い出す。
② リスク分析
特定したリスクのもたらす結果(影響度)と起こりやすさ(発生頻度)
から、リスクの大きさ(リスクレベル)を算定する。
③リスク評価
算定したリスクレベルをリスク受容基準と照らし合わせて対応の必要性を判断し、リスクレベルに基づいて優先順位をつける。
④リスク対応(対策)
リスクに対してどのような対応を行うか決定する。
このうち、リスク特定からリスク評価までの3つのプロセスをリスクアセスメントといいます。リスクアセスメントでは、リスクを分析・評価することで、リスク基準と照らし合わせて対応が必要となるか否かを判断します。
JIS Q 27001:2014に基づく情報セキュリティマネジメント管理基準では、リスクアセスメントを次のような手順であると定めています。
19
リスクアセスメントによって評価を終えたリスクに対し、どのように対処するか対応計画を策定および実践するのがリスク対応(対策)です。
これには大別してリスクコントロールとリスクファイナンシングという2つの手法があり、それぞれ次のように6つの手段に細分化されます。
リスクコントロール(防災)
回避 リスクを伴う活動自体を中止。予想されるリスクを遮断する対策。リターンの放棄を伴う。
損失防止 損失発生を未然に防止するための対策、予防措置を講じて発生類度を減じる。
損失削減 事故が発生した際の損失の拡大を防止・軽減し、損失規模を抑えるための対策。
分離・分散 リスクの源泉を一箇所に集中させず、分離・分散させる対策。
リスクファイナシング(財務的な備え)
移転 保険、契約等により損失発生時に第三者から損失補てんを受ける方法。
保有 リスク潜在を意識しながら対策を講じず、損失発生時に自己負担する方法。
ざっくり言うと、
リスクコントロールは「損失の発生を防止する、もしくは発生した損失の拡大を防止する」もの
リスクファイナンシングは「損失を補てんするための財務的な備えを講ずる」もの
20
不正のトライアングルとは、米国の犯罪学者ドナルド・R・クレッシーが提唱した理論を体系化したものです。「機会」「動機・プレッシャー」「姿勢・正当化」という3つの要素が揃った場合に不正が発生するとされています。
機会
不正行為の実行を可能または容易にする環境が存在すること
動機・プレッシャー
ノルマによるプレッシャーなど、不正を働く動機があること
姿勢・正当化
都合の良い解釈や他人への責任転嫁など、不正行為を自身で正当化させ得る自分勝手な心理状態にあること
これは、逆に言えば「3つの要素のうち1つでも欠けると不正は起きない」ことを意味しています。つまり不正を防止するためには、どれか1つを排除できれば良いわけですね。
21
JPCERコーディネーションセンター(PPCERT/CC)というのは、
Japan Computer Emergency Response Team/Coordination Center の略です。
日本語訳で、日本のコンピュータの緊急事態の対応チーム/共同センターとなります。
JPCERT/CCでは、日本における情報セキュリティ対策活動の向上に取り組んでおり、インシデント発生の報告受付、対応支援、発生状況の把握、手口の分析、再発防止のための対策の検討や助言などを行っています。
このJPCERT/CCが、組織的なインシデント対応体制の構築や運用を支援する目的で取りまとめた資料に「CSIRTマテリアル」があります。現場のシステム管理者が頑張ってなんとかする...ではなくて、経営層が積極的に関与して、組織全体の視点から情報セキュリティ問題にあたる体制(つまりCSIRT)の構築が大事ですよーと、これを支援する目的で作ったのがCSIRTマテリアルです
22
企業からの情報漏洩として、最近とみに取り沙汰されるのが「個人情報」に関するものです。個人情報とは、次のような内容を指します。(個人を識別できる情報が含まれれば個人情報)
個人情報保護法というのは、こうした個人情報を、事業者が適切に取り扱うためのルールを定めたものです。たとえば「顧客リストが横流しされて、セールスの電話がジャンジャカ
かかってくるようになった」などに代表される、消費者が不利益を抜るケースを未然に防くことが目的です。
個人情報に関する認定制度として、プライバシーマーク制度があります。
これは、「JIS Q 15001(個人情報保護マネジメントシステムー要求事項)」に適合して、個人情報の適切な保護体制が整備できている事業者を認定するものです。
こうした個人情報の保護を、システムの設計段階において予防的に組み込もうとする設計思想がプライバシーバイデザインです。
プライバシーバイデザインの目標は、次に掲げる7つの基本原則を実践することにより達成できるとされています。
7つの基本原則
・事後的ではなく事前的、救済的策ではなく予防的(受け身で対応するのではなく
あらかじめ予想して対策しておく)
・初期設定としてのプライバシー(個人に設定の責任を課すのではなくはじめから保護されている)
・デザインに組み込まれるプライバシー
(付加機能ではなく、もともと組み込まれている)
・全機能的ーゼロサムではなく、ポジティブサム(プライバシーとセキュリティを両立させる)
・最初から最後までのセキュリティーすべてのライフサイクルを保護(ライフサイクルを通して情報の安全を確保する)
・可視性と透明性一公開の維持(構成と機能は検証できる)
・利用者のプライバシーの尊重一利用者中心主義を維持する(個人の利益を最大限に維持)
23
コンピュータシステムの利用にあたっては、ユーザ認証を行うことでセキュリティを保ちます。
たとえばですね、社内のコンピュータシステムを、適切な権限に応じて利用できるようにしたいとします。部長さんしか見えちゃいけない書類はそのようにアクセスを制限して、みんなが見ていい書類は誰でも見えるよう権限を設定して、そしてシステムを利用する権限がない人は一切アクセスできないように…・・と、そんなことがしたいとする。
そのために、まず必要となる情報が、「今システムを利用しようとしている人は誰か?」というものです。誰か識別できないと権限を判定しようがないですからね。
この、一番最初に「アナタ誰?」と確認する行為。これをユーザ認証といいます。
ユーザ認証は、不正なアクセスを防ぎ、適切な権限のもとでシステムを運用するためには欠かせない手順です。
ちなみに、ユーザ認証をパスしてシステムを利用可能状態にすることをログイン(ログオン、システムの利用を終了してログイン状態を打ち切ることをログアウト(ログオフ)とは
びます。
24
バイオメトリクス認証
指紋や声紋、虹彩(眼球内にある薄膜)などの身体的特徴を使って個人を識別する認証方法です。生体認証とも呼ばれます。
25
社内で共有している書類を、「許可された人だけが開発できるようにする」というように設定できるのがアクセス権です。これがないと、知られちゃ困る情報がアチコチに漏れたの大切なファイルが勝手に削除されてしまったりと困ったことになってしまいます。
アクセス権には「読取り」「修正」「追加」「削除」などがあります。これらをファイルやデイレクトリに対してユーザごとに指定していくわけです。
その他に、たとえば「開発部の人は見ていいファイル」「部長職以上は見ていいディレクト
り」といった指定を行いたい場合は、個々のユーザに対してではなく、ユーザのグループに対して権限の設定を行います。
26
ユーザ認証を行ったり、アクセス権を設定したりしても、情報資産を扱っているのは結局
のところ「人」。なので、そこから情報が漏れる可能性は否定できません。
そのような、コンピュータシステムとは関係のないところで、人の心理的不注意をついて
情報資産を盗み出す行為。これをソーシャルエンジニアリングといいます。
例)
肩越しにパスワードを盗み見たり
身分を詐称してパスワードを聞き出したり
ゴミ箱を漁って有用な情報を盗み出したり
これについての対策は、「セキュリティポリシで重要書類の処分方法を取り決め、それを徹底する」といったもの…だけではなくて、社員教育を行うなどして、1人1人の意識レベルを改善していくことが大切です。
27
不正アクセスの様々な手法
パスワードリスト攻撃
どこかから入手したID・パスワードのリストを用いて、他のサイトへのログインを試みる手法です。
28
ブルートフォース攻撃
特定のIDに対し、パスワードとして使える文字の組合せを片っ端から全て試す手法です。
総当たり攻撃とも言います。
29
リバースブルートフォース攻撃
ブルートフォース攻撃の逆で、パスワードは固定にしておいて、IDとして使える文字の組合せを片っ端から全て試す手法です。
30
レインボー攻撃
ハッシュ値から元のパスワード文字列を解析する手法です。パスワードになりうる文字列と
ハッシュ値との組をテーブル化しておき、入手したハッシュ値から元の文字列を推測します
31
sQLインジェクション
ユーザの入力値をデータベースに問い合わせて処理を行うWebサイトに対して、その入力内容に悪意のある問い合わせや操作を行うSQL文を埋め込み、データベースのデータを不正に取得したり、改ざんしたりする手法です。
32
DNSキャッシュポイズニング
DNSのキャッシュ機能を悪用して、一時的に偽のドメイン情報を覚えさせることで、偽装
Webサイトへと誘導する手法です。
33
Dos(Denial of service)攻撃
電子メールやWebリクエストなどを、通常ではあり得ないほど大量にサーバへ送りつけることで、ネットワーク上のサービスを提供不能にする手法です。
34
DDoS (Distributed Denial of Service) 攻撃
Dos攻撃を、複数のコンピュータから一斉に行う手法
35
フィッシング
金融機関などを装った偽装Webサイトに利用者を誘導し、暗証番号をはじめとする個人情報を不正に取得しようとする手法です。多くの場合、誘導には正規業者を装った電子メールが用いられます。
36
不正アクセスに成功したコンピュータに潜伏し、攻撃者がそのコンピュータをリモート制御できるようにするソフトウェアの集合体をrootkit(ルートキット)と言います。rootkitには、侵入の痕跡を隠蔽するためのログ改ざんツールや、リモートからの侵入を容易にするバックドアツール、侵入に気付かれないよう改ざんを行ったシステムツール群などが含まれています。
rootkitは、それ自体がコンピュータに直接的な夜害を与えるものではありません。自身を隠蔽し、いつでも攻撃者によるリモートアクセスを可能とすることで、さらなるサイバー攻撃を可能とする下地を整えるためのツール群なのです。
37
ハニーポット
侵入者やマルウェアの挙動を監視するために、意図的に脆弱性を持たせた機器をネットワーク上に公開し、おとりとして用いる手法(もしくはシステム)をハニーポット(Honeypot)といいます。
38
CAPTHA
なぜこのようなことをするのかというと、機械による自動入力を排除するため。自動入力による不正ログインを防止することで、たとえばこれによって、「コンサートチケットの販売開始と同時に、機械による自動入力で大量にチケットを買い占める(この業者は、高値をつけて他者へ転売する)」といった行為を排除したりするわけです
39
コンピュータウイルスの種類
狭義のウイルス
他のプログラムに寄生して、その機能を利用する形で発病するものです。
狭義の「ウイルス」は、このタイプを指します。
マクロウイルス
アプリケーションソフトの持つマクロ機能を悪用したもので、ワープロ
ソフトや表計算ソフトのデータファイルに寄生して感染を広げます。
ワーム
自身単独で複製を生成しながら、ネットワークなどを介してコンピュー
夕間に感染を広めるものです。作成が容易なため、種類が急増しています。
トロイの木馬
有用なプログラムであるように見せかけてユーザに実行をうながし、その裏で不正な処理(データのコピーやコンピュータの悪用など)を行うものです。
40
コンピュータウイルスとは少し異なりますが、マルウェア(コンピュータウイルスを含む悪意のあるソフトウェア全般を指す言葉)の一種として次のようなプログラムにも同様の注意が必要です。
スパイウェア
情報収集を目的としたプログラムで、コンピュータ利用者の個人情報を収集して外部に送信します。
他の有用なプログラムにまぎれて、気づかないうちにインストールされるケースが多く見られます。
ボット
感染した第3者のコンピュータを、ボット作成者の指示通りに動かすものです。
迷惑メールの送信、他のコンピュータを攻撃するなどの踏み台に利用される恐れがあります。
41
ボットというのは、作業を自動化してくれるプログラムのことです。
このボットには、不正な目的で作られたマルウェアの一種があります。これに感染すると、コンピュータは外部から遠隔操作可能なロボットにされてしまいます。
こうしたボットによって構成されるネットワークがボットネットです。
ボットネットとは、ボットに感染したコンピュータたちと、そのコンピュータ群に対して指令を下すサ一バによって構成されています。
42
ポットに指令を下すサーバ、つまりは「侵入して乗っ取ったコンピュータに対して、他のコンピュータへの攻撃などの不正な操作をするよう、外部から命令を出したり応答を受け取ったりする」サーバが、C&Cサーバです。
43
このようなコンピュータウイルスに対して効力を発揮するのがウイルス対策ソフトです。
このソフトウェアは、コンピュータに入ってきたデータを最初にスキャンして、そのデータに問題がないか確認します。
このようなウイルスの予防措置以外にも、コンピュータの中を検査してウイルス感染チェックを行ったり、すでに感染してしまったファイルを修復したりというのも、ウイルス対策
ソフトの役目です。
ウイルス対策ソフトが、多種多様なウイルスを検出するためには、既知ウイルスの特徴を記録したウイルス定義ファイル(シグネチャファイル)が欠かせません。ウイルスは常に新種が発見されていますので、このウイルス定義ファイルも常に最新の状態を保つことが大切です。
44
ウイルス定義ファイルを用いた検出方法では、既知のウイルスしか検出することができません。
そこで、実行中のプログラムの挙動を監視して、不審な処理が行われないか検査する手法がビヘイビア法です。動的ヒューリスティック法とも言います。
検知はできたけども同時に感染しちゃいましたーでは困るので、次のような方法を用いて検査を行います。
・監視下で直接実行させてみて、危検な動作が検出されたら即座にプログラムを停止させる。
・仮想環境で実行させてみて、危検な行動をとるか監 視する
45
コンピュータウイルスの感染経路としては、電子メールの添付ファイルやファイル交換ソフトなどを通じたものが、現在はもっとも多いとされています。
これらのウイルスから身を守るには、次のような取り組みが有効です。
①ウイルス対策ソフトを導入して、常時動かしておくこと。
②ウイルス定義ファイルは常に最新の状態にしておくこと。
③ハードディスク内を定期的にウイルス
チェックしとくこと。
④不用意にインターネットから
ファイルをダウンロードしたりしないこと。
⑤ダウンロードしたファイル、メールの添付ファイル、USBメモりなどで外から持ち込んできたファイルなどは、必ずウイルスチェックしてから使用すること。
それでも感染してしまったら、
①感染の拡大を防ぐために。
ネットワークから切り離す。
②ウイルス対策ソフトを使い。
向題のあったコンピュータのウイルスチェックを行う。
③ウイルスが発見されたら、その旨をシステム管理者に伝えて指示をあおぐ。
46
コンピュータの起動時に、信頼性が確認できるソフトウェアしか実行できないように制限する機能がセキュアブートです。
OSが起動するよりも前段階の領域で感染が起きていた場合
OS上で何度駆除しても、コンピュータを起動させる度に再感染を繰り返すことになっちゃうのです。
具体的には、起動時に読み込まれるブートローダをはじめ、OSやデバイスドライバなどのデジタル署名を確認することで、不正に改ざんされたプログラムからコンピュータを守り
ます。
47
LANの中と外とを区切る壁として登場するのがファイアウォールです。
ファイアウォールは機能的な役割のことなので、特に定まった形はありません。
主な実現方法としては、パケットフィルタリングやアプリケーションゲートウェイなどが挙げられます。
パケットフィルタリングは、パケットを無条件に通過させるのではなく、あらかじめ指定されたルールにのっとって、通過させるか否かを制御する機能です。
その名の通り、「ルールに当てはまらないパケットは、フィルタによってろ過された後に残るゴミのように、通過を遮られて破棄される」わけですね。この機能では、パケットのヘッダ情報(送信元IPアドレスや宛先IPアドレス、プロトコル種別、ポート番号など)をみて、通過の可否を判定します。通常、アプリケーションが提供するサービスはプロトコルとポート番号で区別されますので、この指定はすなわち「どのサービスは通過させるか」と決めたことになります。
48
ファイアウォール的な機能の一つとして、アプリケーションゲートウェイがある。これは、LANの中と外の間に位置して、外部とのやり取りを代行して行う機能です。プロキシサーバ(代理サーバ)とも呼ばれます。
49
外のコンピュータからはプロキシサーバしか見えないので、LAN内のコンピュータが、不正アクセスの標的になることを防ぐことができます。
プロキンサーバが代理をつとめることによって内と外との通信を遮断することができるのです
アプリケーションゲートウェイ型のファイアウォールには、WAF (Web Application
Firewall)があります。これはWebアプリケーションに対する外部からのアクセスを監視するもので、バケットフィルタリング型のファイアウォールがパケットのヘッダ情報を参照して通過の可否を判定するのに対し、WAFでは通信データの中身までチェックすることで悪意を持った攻撃を検知します。
50
既知の手法を用いて実際に攻撃を行い、これによってシステムのセキュリティホールや設定ミスといった脆弱性の有無を確認するテストがペネトレーションテストです。昔小学校とかでよくやった避難訓練みたいなものですね。
51
検査対象となるプログラムに対して、想定外のデータを大量に送りつけることで不具合が生じないか確認するテストを、ファジングと言います。異常系の検査手法のひとつです。
52
ネットワークのやり取り間に潜む危険は、途中で第三者に盗み読まれてしまう、盗聴、途中で第三者にデータを改ざんさせられる、改ざん、第三者がその人になりすまし、データを送受信できてしまう、なりすまし、
がある。
53
データの中身を第三者にはわからない形へ変換することを、暗号化といい、暗号化されたデータを元に戻すことを、複合といい、暗号化や複合をするために必要な道具を鍵といいます。
54
送り手(暗号化する側)と受け手(復号する側)が同じ鍵を用いる暗号化方式を、共通鍵暗号方式と呼びます。この鍵は第三者に知られると意味がなくなりますから、秘密にしておく必要があります。そのことから秘密鍵暗号方式とも呼ばれます。
共通鍵暗号方式は、「お互いに鍵を共有する」というのが前提である以上、通信相手の数だけ秘密鍵を管理しなければいけません。複数の相手に使い回しがきけば管理は楽ですが、そういうわけにもいかない。
しかも、事前に鍵を渡しておく必要がありますから、インターネットのような不特定多数の相手を対象に通信する分野では、かなり利用に無理があると言えます。
55
共通鍵暗号方式の脆弱性を解消したのが、公開鍵暗号方式。
大きな特徴は「一般に広くばらまいてしまう」ための公開鍵という公開用の鍵があること。
また、自分用の鍵のペアを1セット持っていれば複数人とやり取りできますから、「管理する鍵の数が増えちゃって大変!」なんてこともありません。
ただし、共通鍵暗号方式に比べて、公開鍵暗号方式は暗号化や復号に大変処理時間を要します。そのため、利用形態に応じて双方を使い分けるのが一般的です。
56
公開健暗号方式の技術を応用することで、「途中で改ざんされていないか」と「誰が送したものか」を確認できるようにしたのがデジタル署名です。
仕組みは、秘密鍵である人が暗号化したとする。そして受取人が公開鍵で複合する。やってることは公開鍵暗号方式の逆。こうすることで送り主しかもっていない秘密鍵で暗号化されたデータを、複合することができれば、それは送り主が秘密鍵を持っている人ということが確定するというもの。実際には本文全体を暗号化するのではなく、ハッシュ化という手法で短い要約データ(メッセージダイジェスト)を作成し、それを暗号化することでデジタル署名とします。
57
ところでこれまで、「鍵が証明してくれる」「鍵によって確認できる」ということを述べていますが、そもそも「ペアの鍵を作った人物がすでにニセモノだった」場合はどうなるのでしょうか。
一見キリがありませんが、それができてしまう限りは「他人になりすまして通信を行う」なりすまし行為が回避できるとは言い切れません。
というわけで、信用できる第3者が「この公開鍵は確かに本人のものですよ」と証明する
機構が考えられました。それが認証局 (CA:Certificate Authority)です。
このような認証機関と、公開鍵暗号技術を用いて通信の安全性を保証する仕組みのこと
を、公開鍵基盤(PKI:Public Key Infrastructure) と呼びます。
58
ここまで、ネットワークの通信経路上にひそむ危険(盗聴・改さん・なりすまし)や、そこで用いられる暗号化技術についてふれてきました。
では実際にそれらを用いてどのような手順で暗号化通信を行うのか。それを定めたものが暗号化プロトコルです。代表的なものにSSL(Secure Sockets Layer)があります。SSLで行う通信は、簡単に言うと写真のようなステップを経ることで、安全な通信を行います。
たとえばWWWサービスでは、サーバとクライアントのやり取りにHTTPというプロトコルが使われます。これにSSLの暗号化通信を追加したプロトコルがHTTPSです。このプロトコルを使って情報をやり取りすることで、オンラインショッピングで用いるクレジットカード番号や入力した会員情報の漏洩などが防止できるわけです。
なお、現在SSLは後継であるTLS(Transport Layer Security)に置き換わっていますが、TLSだと馴染みがないので、SSLとひとまとめに呼称されていたり、SSL/TLSという表記が用いられたりしています。
59
ネットワーク上に仮想的な専用線空間を作り出して拠点間を安全に接続する技術、もしくはそれによって構築されたネットワークのことをVPNと言います。
インターネットVPNを利用するには、相互の接続口にVPN機能を持った機器を設置します。
インターネット経由でデータを流す場合には、VPN装置がデータを暗号化してから流します。受け取った側では、その暗号化を解除してから内部ネットワークへ転送します。このように途中経路での通信データを暗号化することで、情報の漏洩や改ざんといった
危険を回避することができるのです。
60
ネットワーク層で動作するIP通信に、暗号化や認証機能を持たせることで、より安全に通信を行えるようにしたプロトコルとしてIPsecがあります。VPN (Virtual Private
Network)を構築する際の標準的なプロトコルです。
IPsecは、IPバケットを暗号化することによって、改ざんや盗聴の危険から通信データを守ります。ネットワーク層でセキュリティを確保するため、上位層のアプリケーションが暗号化をサポートしていなくても安全性が保たれます。
61
IPSecには、認証機能を担当する「認証ヘッダ(AH: Authentication Header)」と、暗号化機能を担当する「暗号ベイロード (ESP:Encapsulating Security Payload)」という2つのプロトコルが規定されています。
62
システムの一生というのは上のイラストのようになっていて、導入後の運用ペースになって以降も、業務の見直しや変化に応じてちょこちょこ修正が入ります。そうして運用と保守とを繰り返しながら、やがて役割を終えて酸楽される時間まで働き続けることになる。これを、ソフトウェアライフサイクルと呼びます。
システム化計画として企画段階で検討すべき項目はスケジュール、体制、リスク分析、費用対効果、適用囲といった5項目。うん、わかり難いですね。もうちょっと噛み砕いて書くと、「導入までどんな段取りで」「どういった人員体制で取り組むべきで」「どんなトラブルが
想定できて」「かけたお金に見合う効果があるか考えて」「どの業務をシステム化するか」・・
を決めるという内容になります。
企画が済んだら、次は「どのような機能を盛り込んだシステムが必要なのか」を要件定義として固めます。これをやらないと、「要するにポクたちこんなシステムが欲しいんです」と伝えられないですからね。
え?誰に伝えるか?それは、実際に開発をお願いすることになるシステムベンダさんなのです!…というところで次ページへ。
63
情報提供依頼
情報提供依頼書
(RFT: Request For Infer mation)
を渡して、最新の等入事例などの提供をお願いします。
提案依頼書の作成と提出
システムの内容や予算などの
謡条件を提安イ藤幸
(RFP: Request For Proposal)
にまとめて、システムベンダに提出します。
提案書の受け取り
システムベンダは具体的な内容を提索書としてまとめ、発注側に渡します。
見積書の受け取り
提案内容でOKが出たら、肉発や運用・保守にかかる費用を見積書にまとめて発注側に渡します
システムベンダの選定
提案内容や見積内容を確認して、発注する
システムベンダを決定します。
64
無事に契約が締結されたなら、今度はシステムベンダさんのところで実際の開発作業がはじまります。「要件定義プロセス→開発プロセス」という流れがスタートとなるわけですね。
システムの開発は、以下の工程に従って行われるのが一般的です。
基本計画(要件定義)
利用者にヒアリングするなとして求められる機能や性能を洗い出す。
システム設計
要件定義の結果に基いてシステムの詳細な仕様を固める。複数の段階に分けて、大枠から詳細へと、細分化しながら詰めて
いくのが一般的。
こんな風に一
外部設計
↓
内部故計
↓
プログラム設計
プログラミング
プログラミング言語を使って、設計通りに動くプログラムを作成する。
テスト
作成したプログラムにミスがないか、仕様通り作られているか検証する。
検証は設計の並で、詳細から大枠へと、さかのぼる形で行うのが一般的。
一運用テスト
•
下から上へなのです
↑
システムテスト
↑
結合テスト
単体テスト
導入・運用
固題がなければ発注元にシステムを納入して、運用を閉始する。
65
基本計画 (要件定義)
この工程では、作成するシステムにどんな機能が求められているかを明らかにします。
要点を明確にするためには、利用者へのヒアリングが欠かせません。そのため、システム開発の流れの中で、もっとも利用部門との関わりが必要とされる工程と言えます。
要件を取りまとめた結果については、要件定義書という形で文書にして残します。
66
情報システムは、業務機能を実現するアプリケーション部分と、それを支えるシステム
盤によって構成されます。ヒアリングによって利用者から得られる要求事項は主に業務機を
を担う部分です。これを機能要件と言います。
たとえば…..
受発注処理
在庫管理
出荷処理
人金確認
業務機能を
実現する
アプリケーション部
こっち側の肆ポが
楼能要件
これらの機能要件以外、ざっくり言えば、システム基盤側の要件が非機能要件にあたります。
どのようなOSや
上記を支える
システム盤
ミドルウェアを用いるのか
どのような
ハードウェア様ボと
ての
ネットワーク機器は何を用いるのか
「どうするか
こっち後の
壱ポが
非機能重
67
広義の非機能要件は「機能要件以外のすべて」であり、その定義は様々です。
そこで、主に「システム基盤で実現される要件」に着目したものを、独立行政法人情報処理推進機構(IPA)では、「非機能要求グレードの6大項目」として次のように規定しています。
可用性
システムサービスを継続的に利用可能とするための要求
・運用スケジュール(稼働時間、停止子
定など)
・障害、災害時における稼動目標
性能·拡張性
システムの性能、および将来のシステム
拡張に関する要求
・業務量および今後の増加見張り
・システム化対象業務の特性(ピーク時、通常時、縮退時など)
システムの運用と保守のサービスに関
・運用中に求められるシステム費し
運用・保守性
ベル
する要求
・問題発生時の対応レベル
「. 新システムへの移行期間および移行
移行性
現行システム資産の移行に関する要求
方法
・移行対 資産の種類および移行量
情報システムの安全性の確保に関する
•利用制限
セキュリティ
要求
・不正アクセスの防止
・耐費/免震、重量/空間、温度/温度、長
システム環境・
エコロジー
システムの設置環境やエコロジーに関する要求
音など、システム環境に関する事項
.CO:携出量や消費エネルギーなど、エコロジーに関する事項
68
システム設計
この工程では、要件定義の内容を具体的なシステムの仕様に落とし込みます。
こんなことしたい」という漢然とした要求を、「具体的にこんな画面で」とか
•「ボタン押したらこんな
処理が走って」い
とか、ガッチリ周め
ちゃうのです。
システム設計は、次のような複数の段階に分かれています。
外部設計
外部設計では、システムを「利用者側から見た」設計を行います。つまり、ユーザイン
タフェースなど、利用者が実際に手を触れる部分の設計を行います。
内部設計
内部設計では、システムを「開発者から見た」設計を行います。つまり、外部設計を実現するための実装方法や物理データ設計などを行います。
プログラム設計
プログラム設計では、プログラムを「どう作るか」という視点の設計を行います。プログラムの構造化設計や、モジュール同士のインタフェース仕様などがこれにあたります。
69
プログラミング
この工程では、システム設計で固めた内容にしたがって、プログラムをモジュール単位で作成します。
プログラムの作成は、プログラミング言語を使って命令をひとつひとつ記述していくことで行います。この、「プログラムを作成する」ということを、プログラミングと呼びます。
私たちが使う言葉にも日本語や英語など様々な種類の言語があるように、プログラミング言語にも横々な種類が存在します。こうして書かれたソースコードは機械語に割訳することで、プログラムとして実行できるようになります。
70
テスト
この工程では、作成したプログラムにミスがないかを検証します。
テストは、次のような複数の段階に分かれています。
単体テスト
単体テストでは、モジュールレベルの動作確認を行います。
結合テスト
結合テストでは、モジュールを結合させた状態での動作確認や入出力検査などを行います。
システムテスト
システムテストでは、システム全体を稼働させての動作確認や負荷試験などを行います。
運用テスト
運用テストでは、実際の運用と同じ条件下で動作確認を行います。
71
システム開発手法は、「ウォータフォールモデル」、「プロトタイピングモデル」、「スパイラルモデル」の3つ。
システムに対する要求を確認して、設計して、作って、テストする。この段取りは、システム開発に限らず、たいてい何をする場合にも同じです。基本的な段取りは共通ながら開発手法に様々な種類があるのは、思ってたのと違うとなることもあったりして「頭の中で想像したシステム」と「実際にさわってみたシステム」というのは違う印象になりがちですし、開発者側が仕様を取り違える可能性だってないとは言えない。こうした問題を解消して、効率よくシステム開発を行うための工夫に他なりません。
72
ウォータフォールモデルは、開発手法としてはもっとも古くからあるもので、要件定義からシステム設計、プログラミング、テストと、各工程を順序よく進めていくものです。水が高いところから
低いところへと落ちていくように
各工程を順番に進めていくのが特徴です。
メリット
それぞれの工程を完了させてから次へ進むので管理がしやすく、大規模開発などで広く使われています。
デメリット
必然的に、利用者がシステムを確認できるのは最終段階に入ってからです。しかも、前工程に戻って作業すること(手戻りといいます)は想定していないため、いざ動かしてみて「この仕様は想定していたものと違う」なんて話になると、とんでもなく大変なことになります。
73
プロトタイピングモデルは、開発初期の段階で試作品(プロトタイプ)を作り、それを利用者に確認してもらうことで、開発側との意識ズレを防ぐ手法です。
メリット
利用者が早い段階で(プロトタイプとはいえ)システムに触れて確認することができるため、後になって「あれは違う」という問題がまず起きません。
デメリット
ただ、プロトタイプといっても、作る手間は必要です。そのため、あまり大規模なシステム開発には向きません。
74
スパイラルモデルは、システムを複数のサブシステムに分割して、それぞれのサブシステムごとに開発を進めていく手法です。個々のサブシステムについては、ウォータフォールモデルで開発が進められます。
完成したサブシステムに対する利用者の声は、次のサブシステム開発にも反映されていくため、後になるほど思い違いが生じ難くなり開発効率が上がります。
75
開発作業の各工程では、その工程完了時にレビューという振り返り作業を行います。ここで工程の成果物を検証し問題発見に努めることで、潜在する問題点を早期に発見し次のエ程へと持ち越さないようにするのです。
レビューは基本的にミーティング形式で行われ、人の目視など机上にて問題を発見する取り組み。
76
レビューを実施する手法には次のようなものがある。
ウォークスルー
問題の早期発見を目的として、開発者(もしくは作成者)が主体となって複数の関係者とプログラムや設計書のレビューを行う手法。
インスペクション
あらかじめ参加者の役割を決め、進行役として第三者であるモデレータがレビュー責任者を務めてレビューを実施する手法。
ラウンドロビン
参加者全員が持ち回りでレビュー責任者を務めながらレビューを行う手法。参加者全体の参画意欲を高める効果がある。
77
CASE (Computer Aided Software Engineering)とは、「コンピュータ支援ソフトウェア工学」の意味。コンピュータでシステム開発を支援することにより、その自動化を目指すという学問です。
この考えに基づき、システム開発を支援するツール群がCASEツールです。
CASEツールは、それが適用される工程によって、次のように分類することができます。
上流CASEツール
上流工程の支援を行うツール群で、システムの分析や設計を支援する。
下流CACEツール
下流工程の支援を行う
ツール群で、プログラムの自動生成ツールやテスト支援ツールなどがある。
保守CASEツール
保守を支援するためのツール。
「既存のプログラムを解析して元の設計仕様を探るリバースエンジニアリング」などのリエンジニアリング機能はこれにあたる。
肉発に関する情報は、リポジトリと呼ばれるデータベースで二元管理します
78
前節で紹介した3つ以外の開発手法を見ていくことにします。
RAD (Rapid Application Development)
「Rapid」とは「迅速な」という意味。つまり直訳すると「迅速なアプリケーション開発」となる言葉の略語がRADです。
エンドユーザーと開発者による少人数構成のチームを組み、開発支援ツールを活用するなどして、とにかく短期間で開発を行うことを重要視した開発手法です。
開発支援ツール (RADツール)として有名なところでは、たとえばVisual Basicなどのビジュアル開発環境が該当します。
RADでは、プロトタイプを作ってそれを評価するサイクルを繰り返すことで完成度を高めます。ただし、このフェーズが無制限に繰り返されないよう、開発の期限を設けることがあります。これをタイムボックスと呼びます。
タイムボックスを過ぎると、強制的に次の工程へと進みます。その時点で固まっていない要求については開発を行いません。
79
アジャイルとXP (eXtreme Programming)
スパイラルモデルの派生型で、より短い反復単位(週単位であることが多い)を用いて迅速に開発を行う手法の総称がアジャイルです。アジャイル型の開発では、1つの反復で1つの機能を開発し、反復を終えた時点で機能追加されたソフトウェアをリリースします。
80
アジャイル型の代表的な開発手法がXP (eXtreme Programming)です。少人数の開発に適用しやすいとされ、既存の開発手法が「仕様を固めて開発を行う(後の変更コストは大きい)」であったのに対して、XPは変更を許容する柔軟性を実現しています。
81
XPでは、5つの価値と19のプラクティス(実)が定義されています。そのうち、開発のプラクティスとして定められているのが次の6つです。
テスト駆動開発
実装前にテストを定め、そのテストをパスするように実装を行う。テストは自動テストであることが望ましい。
ペアプログラミング
2人1組でプログラミングを行う。
1人がコードを書き、もう1人がそのコードの検証役となり、随時互いの役割を入れ替えながら作業を進める。
リファクタリング
完成したプログラムでも、内部のコードを随時改善する。冗長な構造を改めるに留め、外部から見た動作は変更しない。
中身は常にブラッシュアップ
ソースコードの共同所有
コードの作成者に断りなく、チーム内の誰もが修正を行うことができる。その代わりに、チーム全員が全てのコードに対して責任を負う。
継続的インテグレーション
単体テストを終えたプログラムは、すぐに結合して結合テストを行う。
YAGNI
「You Aren't Going to Need It.」の略。
今必要とされる機能だけのシンプルな実装に留める。
82
既存ソフトウェアの動作を解析することで、プログラムの仕様やソースコードを導き出すことをリバースエンジニアリングと言います。その目的は、既にあるソフトウェアを再利用することで、新規開発(もしくは仕様書が所在不明になっているような旧来システムの保守)を手助けすることです。一方、これによって得られた仕様をもとに新しいソフトウェアを開発する手法を、フォワードエンジニアリングと言います。
しかし、元となるソフトウェア権利者の許可なくこれを行い、新規ソフトウェアを開発・販売すると、知的財産権の侵害にあたる可能性があるため注意が必要です。
83
公開されている複数のサービスを組み合わせることで新しいサービスを作り出す手法をマッシュアップと言います。Webサービス構築のためによく利用されています。
84
業務をシステム化するにあたっては、対象となる業務をモデル化して分析することが大事です。このモデル化を使って業務分析を行います。利用者側の要求を汲み取り、システムが実現すべき機能の洗い出しを行うために使われるわけですね。
代表的なのはDFDとE-R図の2つ。
DFDはData Flow Diagramの略。その名の通り、データの流れを図としてあらわしたものです。次のような記号を使って図示します。
○ プロセス
データを加工したり変換したりする処理を表す
□ データの源泉と吸収
データの発生元や最終的な行き先を表します。
→ データフロー
データの流れ
= データストア
ファイルやデータベースなど、データを保存する場所
たとえば下の業務を例とした場合、DFDであらわされる図は次のようになります。
顧客から注文がありました。受注。
在庫管理して大丈夫でした。在庫確認。
出荷してもらいました。出荷指示。
売上に計上しました。売上計上。
85
E-R図は、実体 (Entity: エンティティ)と、実体間の関連 (Relationship: リレーションシップ)という概念を使って、データの構造を図にあらわしたものです。
実態は四角形、関連は矢印。
関連をあらわす矢印は、「そちらから見て複数か否か」によって矢じり部分の有りなしが決まります。
会社から見た時、社員は複数名存在します。この場合は先頭に矢尻がつく。
お互いが対等な時、例えば、社員から見た時、会社は一つです。この場合、矢尻はつきません。
関連には「1対多」の他に、「1対1」「多対多」などのバリエーションが考えられます。例としてあげると、次のような感じになります。画像参照
パターン1。会社と社員は1対、多
会社にはたくさんの社員が所属しています
パターン2。当然逆もあって、社員と会社は、多、対1
パターン3。社員と社員番号は1対1
社員番号は1人の社員に対して、一つの固有番号が割り当てられます
パターン4。商品と仕入れ先は多、対、多。複数の商品を複数の仕入れ先から調達している場合です。
86
ユーザからの入力をどのように受け付けるか、ユーザに対してどのような形で情報を表示するか、どのような形で情報を出力として用意するか・・などなど、これらすべてが、ユーザインタフェースというわけです。
ユーザが実際にシステムを操作する部分にあたりますから、システムの使いやすさはこの出来に大きく左右されます。したがって、システムの外部設計段階では、「いかにユーザ側の視点に立って、これらユーザインタフェースの設計を行うか」が大事となります。
87
昔は画面に表示されるのは文字だけで、そのコンピュータに対して入力するのも文字だけ。文字を打ち込むことで命令を伝えて処理させていたのです。このような文字ベースの方式をCUI (Character User Interface)と呼びます。
現在では、より誰でも簡単に扱えるようにと、「画面にアイコンやボタンを表示して、それをマウスなどのポインティングデバイスで操作して命令を伝える」といった、グラフィカルな操作方式が主流になっています。このような方式をGUI (Graphical User Interface) と呼びます。
88
GUIでは、次のような部品を組み合わせて操作画面を作ります。
代表的な部品の名前と役割は覚えておきましょう。画像参照
まず基本となるのがウインドウ
これがアプリケーションの基本領域で、この上に部品を配して、操作画面を作ります。
メニューバー
アプリケーションを操作するための項目が並んだメニューです。
細日をおさめたプルダウンメニューが
羅列されています。
プルダウンメニュー
クリックすると、下に垂れ下がって表示されるメニューです。
テキストボックス
文字入力用の短形領域です。
チェックボックス
選択肢を複数選択したり、特定の項目をオン/オフさせるといった用途に使います。
ラジオボタン
複数ある選択肢の中から、1っだけを飛ばせたい時に使います。
89
使いやすいユーザインタフェースを実現するため、画面設計時は次のような点に留意する必要があります。画像参照
入力は自然な流れとなるように、左から右、上から下へとフォーカスを移動させる。
「重要項目は赤!」などのように。
画面上で用いる色づかいに
ルールを持たせる。
選択肢の数が多いときは、選択肢をグループ分けしたり階展化したりして選びやすくする。
画面ごとのレイアウトや
入力パターンを共通化させる。
入カミスに対してはエラーメッセージを表示して、原因と対処法とをわかりやすく箇潔に提示する。
不慣れな利用者のために
ヘルプなどの操作がイダンスを用意する。
90
システムの処理結果は、多くの場合帳票として出力することになります。この帳票も、次のような点に留意して設計する必要があります。画像参照
各帳栗の基本しイアウトを共通化させることで読みやすくする。
関連する項目は隣接した場所に配置する。
記載する情報は最小限に留めて、ムダにゴチャゴチャさせない。
91
システム内で扱うデータには、何らかのコードを割り当てて管理することがよくあります。例えば、社員コード、商品コード、備品コード、顧客コード。なぜそんなことをするかというと、同じ名前があっても確実に識別する為とか、コードに置きかえることで長ったらしい面品名を入力しなくて済む」であるとか、「コードの割り振り方によって商品の並び替えや分類が簡単に行えるようになる」とか、「入力時のりを検出することができる」とか、システムを活用する上で様々な利点があったりするのです。
92
コード設計を行う際は、次のようなポイントに留意します。
何をコード化の対象とするのか、
どのような規則のコードとするのか、
コードの桁数はいくつにするか、
コード設計で定めたルールは、運用を開始した後になるとなかなか変更することができません。したがって、システムが扱うであろうデータ量の将来予測などを行って、適切な桁数や割り当て規則などを定める必要があります。
コードの桁数が少ないと、
うちみたいな零細は年に2桁も用意してりゃじゅうぶんですわ→か、会社が大成功して、今年の新入社員3桁とか言ってるよ…
じゃあ多ければいいのかと言うと、
前回の反省をいかして今度は10桁にしてみましたよ→覚えづらくて記述ミス連発で、使えないって怒られた
93
チェックディジットというのは、誤入力を判定するためにコードへ付加された数字のことです。画像参照
たとえばこんな6桁のコードがあったとして、社員番号961234。
社員証にバーコードのっけたいから読み取り不良判定用にチェックデジット付加するぜ!ってことになったとする。
そしたらこんな感じでルールを決めちゃう。よし、全ての数を足して961234=25。
それを10で割った時の余りをコードの末尾に付加しよう。
25-10の余は5。
これがチェックデジット。
これをどう活用するかというと、
あとは算出したチェックディジットと
読み取り結果に付加されてるチェックディジットを見比べて、一致すれば読み取りがされ、不一致なら失敗とするわけです。
94
コードには次のような種類がある。
順番コード。
連続した番号を順番に付与していくコード体系です。
区分コード。
対象をいくつかのグループに分け、そのグループごとに連続した番号を付与するコード体系です。
けた別コード
けたごとに意味を持たせたコード体系です。大分類・中分類・小分類といった意味をけたに付与して階層化することができます。
表意コード(ニモニックコード)
項目の意味をあらわず路称や記号などによって表現するコード体系です。コードを見ただけで内容を推測しやすいという特徴を持ちます。
95
誤ったデータや通常では有り得ない入力というのは、システムの誤動作や内部エラーを引き起こす元となります。
したがって問題を未然に防ぐためには、できる限り入力の時点で「間違った入力に対してはエラーを表示する」とか、「そもそも入力されてはいけない文字を受け付けない」といった対策を施すことが求められます。
前ページで述べたチェックディジットもそうした対策のひとつですが、入カチェックには他にも様々な種類があります。主なチェック方法を覚えておきましょう。
ニューメリックチェック。
数値として扱う必要のあるデータに、文字など数値として扱えないものが含まれていないかをチェックします。
シーケンスチェック。
対象とするデータが一定の順序で並んでいるかをチェックします。
リミットチェック。
データが適正な範囲内にあるかをチェックします。
フォーマットチェック。
データの形式(たとえば日付ならyyyy/mm/ddという形式で・など)が正しいかをチェックします。
照合チェック。
登録済みでないコードの入力を避けるため、入カされたコードが、表中に登録されているか照合します。
論理チェック。
販売数と在庫数と仕入数の関係など、対となる項目の値に矛盾がないかをチェックします。
重複チェック。
一意であるべきコードなどが、重複して複数個登録されていないかをチェックします。
96
各プログラムをモジュールという単位に分解・階層化させることを、プログラムの構造化設計と言います。
シンプルで保守性に優れたプログラムを作るためには、構造化設計が欠かせません。そのためのモジュール分割技法には、「データの流れに着目」した技法と、「データの構造に着目」
した技法の2グループがあります。
データの流れに着目。
・STS分割法
・トランザクション(TR)分割法
••共通機能分割去
データの構造に着日。
・ジャクソン法
・ワーニエ法
人の名前がついてるやつはデータ構造に着目して分割するんだぐらいに覚えておけばおけ
97
プログラムをモジュールに分けると何がうれしいかというと、次のようなメリットが得られるところです。
作業が分担できる。
複数人で並行してプログラミング作業を進めることができます。
再利用が容易。
「共通する機能を部品として
使いまわすことができます。
修正が一部で済みます。
欠陥のあるモジュールを修正することで、プログラムが改修できます
98
分割技法のうち、「データの流れ」に着目した技法は次の3種類です。
STS分割法。
プログラムを「入力処理(源泉:Source)」、「変換処理(変換:transform)」、「出力処理(吸収:Sink)」という3つのモジュール構造に分割する方法です。
商品コードを読み取って(入力処理)、そのコードを元に商品価格を取得(変換処理)、画面に表示する(出力処理)。
99
トランザクション分割法。
プログラムを一連の処理(トランザクション)単位に分割する方法です。
例えば、
基本給の更新、手当の更新、控除の更新に関する伝票を個別に受け付け、給与計算用のファイルを更新するプログラム、を分割すると、画像参照
100
共通機能分割法。
プログラム中の共通機能をモジュールとして分割する方法です。
共通モジュールとして切り出すことで、類似機能を重複して作る心事がなくなります。画像参照
問題一覧
1
さて、メールをやり取りするにはメールアドレスを宛先として指定するわけですが、この
宛先がよく見てみると数種類用意されていたりします。
実は電子メールというのは、その目的に応じて3種類の宛先を使い分けできるようになっているのです。それぞれの意味というのは次のような感じ。
TO
本来の意味の「宛先」です。送信したい相手のメールアドレスをこの欄に記載します。
СС
Carbon Copy(カーボンコピー)の略で、「参考までにコピー送っとくから、一応アナタも見といてね」としたい相手のメールアドレスをこの欄に記載します。
BCC
Blind Carbon Copy(ブラインドカーボンコピー)の略で、「他者には伏せた状態でコピ一送っとくから、一応アナタも見といてね」としたい相手のメールアドレスをこの欄に記載します。
1対1でメールのやり取りをしている時には、TO以外の宛先を意識することはまずありません。じゃあどんな時に使うかというと、「複数の宛先にまとめてメールを送信したい時」
に使います。このように、同じメールを複数の相手に出すやり方を、同報メール、と呼びます。
2
電子メールの送信には、SMTPというプロトコルを使用します。
たとえば電子メールを実際の郵便に置きかえて考えると・
ポストに入れる
郵後屋さんが運ぶ
郵便受けに届く
ポストから、相手の郵便後けに届けるまでがSMTPの役割となります。
このSMTPに対応したサーバのことをSMTPサーバと呼びます。
SMTPサーバには、次のような2つの仕事があります。
①送信されたメール本文を受け取る。
②相手先のメールサーバへとメールを配送します。
3
一方、電子メールを受信するには、POPというプロトコルを使用します。
先ほどと同じく実際の郵便に置きかえて考えると・郵便受けから電子メールを取り出すのがPOPの役割となります。
このPOPに対応したサーバのことをPOPサーバと呼びます。
POPサーバは、電子メールソフトなどのPOPクライアントから「受信メールくださいな」と要求があがってくると、そのユーザのメールボックスから、受信済みのメールを取り出して配送します。現在は「POP Version3」を意味するPOP3が広く使われています。
4
IMAP (Internet Message Access Protocol)は、POPと同じく電子メールを受信するためのプロトコルです。
POPとは異なり、送受信データをサーバ上で管理するため、どのコンピュータからも同じデータを参照することができます。現在はIMAP4というバージョンが広く用いられています。
5
これまで取り上げてきた、SMTP、POP、IMAPという電子メール用のプロトコルは、いずれもネットワーク上を無防備な素のデータとしてやり取りします。
そこで、SSL/TLS という暗号化プロトコルを用いることにより、サーバとの間の通信経路を安全にやり取りできるようにしたのが次のプロトコルたちです。
電子メールでは、本来ASCII文字しか扱うことができません。そこで、日本語などの複数バイト文字や、画像データなどのファイルを添付できるようにする拡張規格がMIME(Multipurpose Internet Mail Extensions) です。当然そのままでは本来の文と区別がつかなくなるので、メールをパートごとに分けて、どんなデータなのか種別を記します。受信側はこの種別を元に、各パートを復元して参照する。
このMIMEに、暗号化やデジタル署名の機能を加えた規格としてS/MIMEがあります。メール本文を暗号化することで、盗聴や改さんの危険から守り・
デジタル署名によってなりすましを防止します
6
現在、電子メールの本文を記述するメッセージ形式には、テキスト形式とHTML形式の2種類があります。
テキスト形式
・文字だけで構成されるメール形式
・一般的に使われているのはこれ
・多くの環境で問題なく読んでもらえる
HTML形式
・Webページの記述に用いられるHTMLで本文を作成するメール形式
・Webページ同様にタグが使えるため、文字の英師や画像の埋込、リンクの設定
など、見栄え良く本文を構成することができる。
・受信側もHTML形式に対応していないと、意図した通りに表示されない
もともと電子メールというのは、MIMEの項でも述べた通り、テキスト形式のみ…・それも最もシンプルなASCII文字に限られていました。そこにMIMEなどの拡張が施されてより多<の文字が扱えるようになり、さらに「より表現力を」という要を満たす形で開発されたのがHTML形式のメールです。
HTML形式であるため、Webページと同じく文字の装飾や本文内に画像を配置するなどの多様な表現力を持ちますが、その一方で関覧時には、本文内に悪意のあるスクリプトが埋め込まれていて自動実行される可能性や、内装Webサイトへ誘導するフィッシング詐欺被害に合うなどの危換性に留意する必要があります。
7
電子メールの便利なところは、相手のデバイスを意識せずにメールのやり取りができることです。考えてみれば、世界中の誰かさんとインターネットでつながって、相手が何を使ってメールを読むのかも知らないままやり取りできちゃう。これってすごいことですよね。
ただ、そこでちょっと思い出して欲しいのが文字コードの話。
文字コードには色んな種類がありますから、あるコンピュータで表示できる文字だからといって、それが他のコンピュータでも表示できるとは限らないのです。
このように、特定のコンピュータでしか表示できない文字のことを機種依存文字と呼びます。
機種存文字には次のようなものがあります。あと、厳密には機種依存文字ではないのですが、半角カナ(アイウエオみたいなの)も同じく文字化けの原因になりますので、ともにメールでの使用は控えた方が無難です。
8
IoTとはInternet of Thingsの略。「モノのインターネット」と訳されています。モノのテジタル化・ネットワーク化が進んだ社会のような意味だと捉えれば良いでしょう。
かつてはコンピュータ同士を広く接続するインフラとして用いられていたインターネットですが、スマートフォンやタブレットなどの情報端末、テレビやBDレコーダーなどのデジタル家電にはじまり、今ではスマート家電や各種センサーを搭載した様々な”モノが、インターネットに接続されるようになりました。
こうした数多くのモノが、そのセンサーによって見聞きしたあらゆる事象は、インターネット上に「ビッグデータ」と言われる勝大な「数値化されたデジタル情報」を日々生み出し続けています。あまりに膨大すぎて人の手にはあまるので、このビッグデータの活用には、
・人工知能(Al)技術が欠かせません。その一方で、人工知能技術自体の発達にも、ビッグデータが一役も二役も買っているのが面白いところです。
IoT社会の現代において、ビッグデータと人工知能の組み合わせは、デジタル技術をさらに躍進させる存在として注目を浴びています。
9
「とにかく膨大」なデータだからビッグデータ。どこからがじゃあビッグなのかというと、典型的なデータベースソフトウェアが把握し、蓄積し、運用し、分析できる能力を超えたサイズのデータを指すとされています。
このビッグデータが持つ大きな特性が、次に挙げる「3つのV」です。
Variety(多様性)
データベースで扱いやすい
ように整形された構造化データだけでなく、画像や音声、動画などの多種多様な非構造化データもその対象に含む
Velocity (頻度)
SNSのような、不特定多数の個人が発信する乱雑なデータ
刻一刻と変化する株価などのマーケット情報
各種センサーから得られるリアルタイムデータなど
リアルタイムで取得データなど、大量の変動データを含む
Volume (量)
これらを分析する際は、一部を抜き出して対象とするようなサンプリングは行わず、デー夕全体を対象に統計学的手法を用いて行います。大量のデータを統計的、数学的手法で分析し、法則や因果関係を見つけ出す技術を、データマイニング、と言います。
10
AIの学習方法には主に3つある。
教師あり学習
データと正解をセットにして与える(もしくは誤りを指摘する)
教師なし学習
データを大量に与えることで、特徴を見つけて分類できるようにならせる
強化学習
個々の行動に対する善し悪しを得点として与えることで、得点が最も多く得られる方策を学習する手法
11
世界中アチコチにつながっているインターネット。企業のネットワークをこいつにつなぐと確かに便利なのですが、それは同時に「外部ネットワークに潜む悪意ともつながる」という
危険性をはらんでいます。
たとえば外部の人間・特に悪意を持った人間が自社のネットワークに侵入できてしまうとどうなるか。情報の漏洩はもちろん、重要なデータやファイルを破壊される恐れが出てきます。また、優入を許さなかったとしても、大量の電子メールを送りつけたり、企業Webサイトを繰り返しリロードして負荷を増大させたりとすることで、サーバの処理能力をパンクさせる妨害行為なども起こりえます。
考えてみれば、事務所に泥棒が入れば大変ですし、FAXを延々と送りつけてきて妨害行為を働くなんてのも古くからある手法ですよね。そのようなことと同じ危険が、ネットワークの中にもあるということなのです。
悪意を持った侵入者は、常にシステムの脂弱性という穴を探しています。これらの脅威に対して、企業の持つ情報資産をいかに守るか。それが情報セキュリティです。
12
組織が自身の情報資産を適切に管理し、それらを守るための仕組みが情報セキュリティマネジメントシステム(ISMS)です。情報セキュリティの3要素(機密性、完全性、可用性)をバランス良く維持・改善していくことを目的とします。
この情報セキュリティマネジメントシステムを、どのように構築し、維持・改善していくべきかを定めた規格がISO/IEC 27001 (JIS Q 27001)で、
組織が構築した情報セキュリティマネジメントシステムが、この規格に基づいて適切に構築・運用されているかを証明するのが、第三者であるISMS認証機関が審査して認証を行うISMS適合性評価制度です。ここでISMS認証を受けた組織は、情報資産を適切に管理する仕組みを有してますよとなるわけです。しかし情報セキュリティ対策は、一度行ったら終わりというわけではありません。この分野は常に新しい音威に対して備える必要があるため、PDCAサイクルに基づいて継続的な見直しと改善のプロセスを繰り返すことが求められます。
13
情報セキュリティは、「とにかく穴を見つけて片っ端からふさげばいい」というものではありません。たとえば次のように穴をふさいでみたとしましょう。
パスワードは3重に、かつ指紋認在、声認証、虹彩認証をパスした人だけがネットワークにアクセスできます、と言うふうに。しかし、このように「セキュリティのためた」と堅牢なシステムにすればするほど、今度は「使いづらい」という問題が出てきてしまいます。そもそも「安全最優先」と言うのであれば、そこでつながってるLANケーブルを引っこ抜いちゃえばいいのです。でも、それだとネットワークの利便性が享受できないからよろしくない。じゃあ、安全性と利便性とをどこでバランスさせる
か・。これがセキュリティマネジメントの基本的な考え方です。
14
そんなわけで情報セキュリティは、次の3つの要素を管理して、うまくバランスさせることが大切だとされています。
機密性
許可された人だけが情報にアクセスできるようにするなどして、情報が漏洩しないようにすることを指します。
完全性
情報が書き換えられたりすることなく、完全な状態を保っていることを指します。
可用性
利用者が、必要な時に必要な情報資産を使用できるようにすることを指します。
15
近年は「機密性」、「完全性」、「可用性」の3要素に加えて、「真正性」「責任追跡性」「否認防止」「信頼性」という4つの要素を含む「情報セキュリティの7要素」が提唱されています。
これらを意識することで、さらに情報セキュリティを高めることができます。
各特性はISO 27000規格の用語定義で次のように記されています
※責任追跡性のみ特に定義がありません。
真正性(authenticity)
エンティティ(実体・主体)は、それが主張するとおりのものであると言う特性。例)🐙タコです。疑いの余地なく
青任追跡性(accountabillity)
accountabilityは「説明責任」という意味。いつ、だれが、何をしたのかを特定・追跡できる特性。
否認防止(non-repudiation)
主張された事象又は処置の発生、及びそれらを引き起こしたエンティティ(実体・主体)を証明する能力。
信頼性(reliability)
意図する行動と結果とが一貫しているという特性。
16
さて、色々検討した末に、「ウチの情報セキュリティは、こんな風にして守るべきだぜ」と思い至ったとします。でも、思っているだけでは何も反映されません。
そこで、組織の経営者(トップマネジメント)が、企業としてどのように取り組むかを明文化して、従業員および関連する外部関係者に周知・徹底するわけです。これを、セキュリティポリシ(情報セキュリティ方針)と呼びます。
セキュリティポリシは基本方針と対策基準、実施手順の3階層で構成されています。
①基本方針
情報セキュリティに対して、企業としての基本方針を定める。
というわけだから、我が社はこれこれこーで取り組むべきだ
②対策基準
上の方針を実現化するために。
行うべき対策や基準を定める。
それではコレとアレとソレを、やらなくてはなりますまい
③実施手順
業務の中でどのように実施していくかの
具体的な手順を定める。
詳細な運用マニュアルとか
作りますね
17
情報セキュリティの目的はなにかというと、「情報資産をリスクから守る」ことに尽きます。
では、リスクとは具体的に何でしょう?
情報セキュリティにおける「リスク」とは、「組織が持つ情報資産の脆弱性を突く脅威によって、組織が損害を被る可能性のこと」を指します。
リスクマネジメントは、経営層(トップマネジメント)が責任を負い、業務の一環として役割を分担しながら、全社的に取り組むものです。
18
リスクは小さなものから大きなものまで多種多様にあるものです。それらすべてに対応できれば理想的でしょうが、それでは費用対効果が悪くてしょうがないので、取捨選択を行う必要があります。そこで出てくるのがリスク受容基準です。
リスクマネジメントでは、この受容基準におさまらないリスクを洗い出し、適切に管意しなくてはいけません。そのために行われるのが、次に示す4つのプロセスです。
①リスク特定
リスクを洗い出す。
② リスク分析
特定したリスクのもたらす結果(影響度)と起こりやすさ(発生頻度)
から、リスクの大きさ(リスクレベル)を算定する。
③リスク評価
算定したリスクレベルをリスク受容基準と照らし合わせて対応の必要性を判断し、リスクレベルに基づいて優先順位をつける。
④リスク対応(対策)
リスクに対してどのような対応を行うか決定する。
このうち、リスク特定からリスク評価までの3つのプロセスをリスクアセスメントといいます。リスクアセスメントでは、リスクを分析・評価することで、リスク基準と照らし合わせて対応が必要となるか否かを判断します。
JIS Q 27001:2014に基づく情報セキュリティマネジメント管理基準では、リスクアセスメントを次のような手順であると定めています。
19
リスクアセスメントによって評価を終えたリスクに対し、どのように対処するか対応計画を策定および実践するのがリスク対応(対策)です。
これには大別してリスクコントロールとリスクファイナンシングという2つの手法があり、それぞれ次のように6つの手段に細分化されます。
リスクコントロール(防災)
回避 リスクを伴う活動自体を中止。予想されるリスクを遮断する対策。リターンの放棄を伴う。
損失防止 損失発生を未然に防止するための対策、予防措置を講じて発生類度を減じる。
損失削減 事故が発生した際の損失の拡大を防止・軽減し、損失規模を抑えるための対策。
分離・分散 リスクの源泉を一箇所に集中させず、分離・分散させる対策。
リスクファイナシング(財務的な備え)
移転 保険、契約等により損失発生時に第三者から損失補てんを受ける方法。
保有 リスク潜在を意識しながら対策を講じず、損失発生時に自己負担する方法。
ざっくり言うと、
リスクコントロールは「損失の発生を防止する、もしくは発生した損失の拡大を防止する」もの
リスクファイナンシングは「損失を補てんするための財務的な備えを講ずる」もの
20
不正のトライアングルとは、米国の犯罪学者ドナルド・R・クレッシーが提唱した理論を体系化したものです。「機会」「動機・プレッシャー」「姿勢・正当化」という3つの要素が揃った場合に不正が発生するとされています。
機会
不正行為の実行を可能または容易にする環境が存在すること
動機・プレッシャー
ノルマによるプレッシャーなど、不正を働く動機があること
姿勢・正当化
都合の良い解釈や他人への責任転嫁など、不正行為を自身で正当化させ得る自分勝手な心理状態にあること
これは、逆に言えば「3つの要素のうち1つでも欠けると不正は起きない」ことを意味しています。つまり不正を防止するためには、どれか1つを排除できれば良いわけですね。
21
JPCERコーディネーションセンター(PPCERT/CC)というのは、
Japan Computer Emergency Response Team/Coordination Center の略です。
日本語訳で、日本のコンピュータの緊急事態の対応チーム/共同センターとなります。
JPCERT/CCでは、日本における情報セキュリティ対策活動の向上に取り組んでおり、インシデント発生の報告受付、対応支援、発生状況の把握、手口の分析、再発防止のための対策の検討や助言などを行っています。
このJPCERT/CCが、組織的なインシデント対応体制の構築や運用を支援する目的で取りまとめた資料に「CSIRTマテリアル」があります。現場のシステム管理者が頑張ってなんとかする...ではなくて、経営層が積極的に関与して、組織全体の視点から情報セキュリティ問題にあたる体制(つまりCSIRT)の構築が大事ですよーと、これを支援する目的で作ったのがCSIRTマテリアルです
22
企業からの情報漏洩として、最近とみに取り沙汰されるのが「個人情報」に関するものです。個人情報とは、次のような内容を指します。(個人を識別できる情報が含まれれば個人情報)
個人情報保護法というのは、こうした個人情報を、事業者が適切に取り扱うためのルールを定めたものです。たとえば「顧客リストが横流しされて、セールスの電話がジャンジャカ
かかってくるようになった」などに代表される、消費者が不利益を抜るケースを未然に防くことが目的です。
個人情報に関する認定制度として、プライバシーマーク制度があります。
これは、「JIS Q 15001(個人情報保護マネジメントシステムー要求事項)」に適合して、個人情報の適切な保護体制が整備できている事業者を認定するものです。
こうした個人情報の保護を、システムの設計段階において予防的に組み込もうとする設計思想がプライバシーバイデザインです。
プライバシーバイデザインの目標は、次に掲げる7つの基本原則を実践することにより達成できるとされています。
7つの基本原則
・事後的ではなく事前的、救済的策ではなく予防的(受け身で対応するのではなく
あらかじめ予想して対策しておく)
・初期設定としてのプライバシー(個人に設定の責任を課すのではなくはじめから保護されている)
・デザインに組み込まれるプライバシー
(付加機能ではなく、もともと組み込まれている)
・全機能的ーゼロサムではなく、ポジティブサム(プライバシーとセキュリティを両立させる)
・最初から最後までのセキュリティーすべてのライフサイクルを保護(ライフサイクルを通して情報の安全を確保する)
・可視性と透明性一公開の維持(構成と機能は検証できる)
・利用者のプライバシーの尊重一利用者中心主義を維持する(個人の利益を最大限に維持)
23
コンピュータシステムの利用にあたっては、ユーザ認証を行うことでセキュリティを保ちます。
たとえばですね、社内のコンピュータシステムを、適切な権限に応じて利用できるようにしたいとします。部長さんしか見えちゃいけない書類はそのようにアクセスを制限して、みんなが見ていい書類は誰でも見えるよう権限を設定して、そしてシステムを利用する権限がない人は一切アクセスできないように…・・と、そんなことがしたいとする。
そのために、まず必要となる情報が、「今システムを利用しようとしている人は誰か?」というものです。誰か識別できないと権限を判定しようがないですからね。
この、一番最初に「アナタ誰?」と確認する行為。これをユーザ認証といいます。
ユーザ認証は、不正なアクセスを防ぎ、適切な権限のもとでシステムを運用するためには欠かせない手順です。
ちなみに、ユーザ認証をパスしてシステムを利用可能状態にすることをログイン(ログオン、システムの利用を終了してログイン状態を打ち切ることをログアウト(ログオフ)とは
びます。
24
バイオメトリクス認証
指紋や声紋、虹彩(眼球内にある薄膜)などの身体的特徴を使って個人を識別する認証方法です。生体認証とも呼ばれます。
25
社内で共有している書類を、「許可された人だけが開発できるようにする」というように設定できるのがアクセス権です。これがないと、知られちゃ困る情報がアチコチに漏れたの大切なファイルが勝手に削除されてしまったりと困ったことになってしまいます。
アクセス権には「読取り」「修正」「追加」「削除」などがあります。これらをファイルやデイレクトリに対してユーザごとに指定していくわけです。
その他に、たとえば「開発部の人は見ていいファイル」「部長職以上は見ていいディレクト
り」といった指定を行いたい場合は、個々のユーザに対してではなく、ユーザのグループに対して権限の設定を行います。
26
ユーザ認証を行ったり、アクセス権を設定したりしても、情報資産を扱っているのは結局
のところ「人」。なので、そこから情報が漏れる可能性は否定できません。
そのような、コンピュータシステムとは関係のないところで、人の心理的不注意をついて
情報資産を盗み出す行為。これをソーシャルエンジニアリングといいます。
例)
肩越しにパスワードを盗み見たり
身分を詐称してパスワードを聞き出したり
ゴミ箱を漁って有用な情報を盗み出したり
これについての対策は、「セキュリティポリシで重要書類の処分方法を取り決め、それを徹底する」といったもの…だけではなくて、社員教育を行うなどして、1人1人の意識レベルを改善していくことが大切です。
27
不正アクセスの様々な手法
パスワードリスト攻撃
どこかから入手したID・パスワードのリストを用いて、他のサイトへのログインを試みる手法です。
28
ブルートフォース攻撃
特定のIDに対し、パスワードとして使える文字の組合せを片っ端から全て試す手法です。
総当たり攻撃とも言います。
29
リバースブルートフォース攻撃
ブルートフォース攻撃の逆で、パスワードは固定にしておいて、IDとして使える文字の組合せを片っ端から全て試す手法です。
30
レインボー攻撃
ハッシュ値から元のパスワード文字列を解析する手法です。パスワードになりうる文字列と
ハッシュ値との組をテーブル化しておき、入手したハッシュ値から元の文字列を推測します
31
sQLインジェクション
ユーザの入力値をデータベースに問い合わせて処理を行うWebサイトに対して、その入力内容に悪意のある問い合わせや操作を行うSQL文を埋め込み、データベースのデータを不正に取得したり、改ざんしたりする手法です。
32
DNSキャッシュポイズニング
DNSのキャッシュ機能を悪用して、一時的に偽のドメイン情報を覚えさせることで、偽装
Webサイトへと誘導する手法です。
33
Dos(Denial of service)攻撃
電子メールやWebリクエストなどを、通常ではあり得ないほど大量にサーバへ送りつけることで、ネットワーク上のサービスを提供不能にする手法です。
34
DDoS (Distributed Denial of Service) 攻撃
Dos攻撃を、複数のコンピュータから一斉に行う手法
35
フィッシング
金融機関などを装った偽装Webサイトに利用者を誘導し、暗証番号をはじめとする個人情報を不正に取得しようとする手法です。多くの場合、誘導には正規業者を装った電子メールが用いられます。
36
不正アクセスに成功したコンピュータに潜伏し、攻撃者がそのコンピュータをリモート制御できるようにするソフトウェアの集合体をrootkit(ルートキット)と言います。rootkitには、侵入の痕跡を隠蔽するためのログ改ざんツールや、リモートからの侵入を容易にするバックドアツール、侵入に気付かれないよう改ざんを行ったシステムツール群などが含まれています。
rootkitは、それ自体がコンピュータに直接的な夜害を与えるものではありません。自身を隠蔽し、いつでも攻撃者によるリモートアクセスを可能とすることで、さらなるサイバー攻撃を可能とする下地を整えるためのツール群なのです。
37
ハニーポット
侵入者やマルウェアの挙動を監視するために、意図的に脆弱性を持たせた機器をネットワーク上に公開し、おとりとして用いる手法(もしくはシステム)をハニーポット(Honeypot)といいます。
38
CAPTHA
なぜこのようなことをするのかというと、機械による自動入力を排除するため。自動入力による不正ログインを防止することで、たとえばこれによって、「コンサートチケットの販売開始と同時に、機械による自動入力で大量にチケットを買い占める(この業者は、高値をつけて他者へ転売する)」といった行為を排除したりするわけです
39
コンピュータウイルスの種類
狭義のウイルス
他のプログラムに寄生して、その機能を利用する形で発病するものです。
狭義の「ウイルス」は、このタイプを指します。
マクロウイルス
アプリケーションソフトの持つマクロ機能を悪用したもので、ワープロ
ソフトや表計算ソフトのデータファイルに寄生して感染を広げます。
ワーム
自身単独で複製を生成しながら、ネットワークなどを介してコンピュー
夕間に感染を広めるものです。作成が容易なため、種類が急増しています。
トロイの木馬
有用なプログラムであるように見せかけてユーザに実行をうながし、その裏で不正な処理(データのコピーやコンピュータの悪用など)を行うものです。
40
コンピュータウイルスとは少し異なりますが、マルウェア(コンピュータウイルスを含む悪意のあるソフトウェア全般を指す言葉)の一種として次のようなプログラムにも同様の注意が必要です。
スパイウェア
情報収集を目的としたプログラムで、コンピュータ利用者の個人情報を収集して外部に送信します。
他の有用なプログラムにまぎれて、気づかないうちにインストールされるケースが多く見られます。
ボット
感染した第3者のコンピュータを、ボット作成者の指示通りに動かすものです。
迷惑メールの送信、他のコンピュータを攻撃するなどの踏み台に利用される恐れがあります。
41
ボットというのは、作業を自動化してくれるプログラムのことです。
このボットには、不正な目的で作られたマルウェアの一種があります。これに感染すると、コンピュータは外部から遠隔操作可能なロボットにされてしまいます。
こうしたボットによって構成されるネットワークがボットネットです。
ボットネットとは、ボットに感染したコンピュータたちと、そのコンピュータ群に対して指令を下すサ一バによって構成されています。
42
ポットに指令を下すサーバ、つまりは「侵入して乗っ取ったコンピュータに対して、他のコンピュータへの攻撃などの不正な操作をするよう、外部から命令を出したり応答を受け取ったりする」サーバが、C&Cサーバです。
43
このようなコンピュータウイルスに対して効力を発揮するのがウイルス対策ソフトです。
このソフトウェアは、コンピュータに入ってきたデータを最初にスキャンして、そのデータに問題がないか確認します。
このようなウイルスの予防措置以外にも、コンピュータの中を検査してウイルス感染チェックを行ったり、すでに感染してしまったファイルを修復したりというのも、ウイルス対策
ソフトの役目です。
ウイルス対策ソフトが、多種多様なウイルスを検出するためには、既知ウイルスの特徴を記録したウイルス定義ファイル(シグネチャファイル)が欠かせません。ウイルスは常に新種が発見されていますので、このウイルス定義ファイルも常に最新の状態を保つことが大切です。
44
ウイルス定義ファイルを用いた検出方法では、既知のウイルスしか検出することができません。
そこで、実行中のプログラムの挙動を監視して、不審な処理が行われないか検査する手法がビヘイビア法です。動的ヒューリスティック法とも言います。
検知はできたけども同時に感染しちゃいましたーでは困るので、次のような方法を用いて検査を行います。
・監視下で直接実行させてみて、危検な動作が検出されたら即座にプログラムを停止させる。
・仮想環境で実行させてみて、危検な行動をとるか監 視する
45
コンピュータウイルスの感染経路としては、電子メールの添付ファイルやファイル交換ソフトなどを通じたものが、現在はもっとも多いとされています。
これらのウイルスから身を守るには、次のような取り組みが有効です。
①ウイルス対策ソフトを導入して、常時動かしておくこと。
②ウイルス定義ファイルは常に最新の状態にしておくこと。
③ハードディスク内を定期的にウイルス
チェックしとくこと。
④不用意にインターネットから
ファイルをダウンロードしたりしないこと。
⑤ダウンロードしたファイル、メールの添付ファイル、USBメモりなどで外から持ち込んできたファイルなどは、必ずウイルスチェックしてから使用すること。
それでも感染してしまったら、
①感染の拡大を防ぐために。
ネットワークから切り離す。
②ウイルス対策ソフトを使い。
向題のあったコンピュータのウイルスチェックを行う。
③ウイルスが発見されたら、その旨をシステム管理者に伝えて指示をあおぐ。
46
コンピュータの起動時に、信頼性が確認できるソフトウェアしか実行できないように制限する機能がセキュアブートです。
OSが起動するよりも前段階の領域で感染が起きていた場合
OS上で何度駆除しても、コンピュータを起動させる度に再感染を繰り返すことになっちゃうのです。
具体的には、起動時に読み込まれるブートローダをはじめ、OSやデバイスドライバなどのデジタル署名を確認することで、不正に改ざんされたプログラムからコンピュータを守り
ます。
47
LANの中と外とを区切る壁として登場するのがファイアウォールです。
ファイアウォールは機能的な役割のことなので、特に定まった形はありません。
主な実現方法としては、パケットフィルタリングやアプリケーションゲートウェイなどが挙げられます。
パケットフィルタリングは、パケットを無条件に通過させるのではなく、あらかじめ指定されたルールにのっとって、通過させるか否かを制御する機能です。
その名の通り、「ルールに当てはまらないパケットは、フィルタによってろ過された後に残るゴミのように、通過を遮られて破棄される」わけですね。この機能では、パケットのヘッダ情報(送信元IPアドレスや宛先IPアドレス、プロトコル種別、ポート番号など)をみて、通過の可否を判定します。通常、アプリケーションが提供するサービスはプロトコルとポート番号で区別されますので、この指定はすなわち「どのサービスは通過させるか」と決めたことになります。
48
ファイアウォール的な機能の一つとして、アプリケーションゲートウェイがある。これは、LANの中と外の間に位置して、外部とのやり取りを代行して行う機能です。プロキシサーバ(代理サーバ)とも呼ばれます。
49
外のコンピュータからはプロキシサーバしか見えないので、LAN内のコンピュータが、不正アクセスの標的になることを防ぐことができます。
プロキンサーバが代理をつとめることによって内と外との通信を遮断することができるのです
アプリケーションゲートウェイ型のファイアウォールには、WAF (Web Application
Firewall)があります。これはWebアプリケーションに対する外部からのアクセスを監視するもので、バケットフィルタリング型のファイアウォールがパケットのヘッダ情報を参照して通過の可否を判定するのに対し、WAFでは通信データの中身までチェックすることで悪意を持った攻撃を検知します。
50
既知の手法を用いて実際に攻撃を行い、これによってシステムのセキュリティホールや設定ミスといった脆弱性の有無を確認するテストがペネトレーションテストです。昔小学校とかでよくやった避難訓練みたいなものですね。
51
検査対象となるプログラムに対して、想定外のデータを大量に送りつけることで不具合が生じないか確認するテストを、ファジングと言います。異常系の検査手法のひとつです。
52
ネットワークのやり取り間に潜む危険は、途中で第三者に盗み読まれてしまう、盗聴、途中で第三者にデータを改ざんさせられる、改ざん、第三者がその人になりすまし、データを送受信できてしまう、なりすまし、
がある。
53
データの中身を第三者にはわからない形へ変換することを、暗号化といい、暗号化されたデータを元に戻すことを、複合といい、暗号化や複合をするために必要な道具を鍵といいます。
54
送り手(暗号化する側)と受け手(復号する側)が同じ鍵を用いる暗号化方式を、共通鍵暗号方式と呼びます。この鍵は第三者に知られると意味がなくなりますから、秘密にしておく必要があります。そのことから秘密鍵暗号方式とも呼ばれます。
共通鍵暗号方式は、「お互いに鍵を共有する」というのが前提である以上、通信相手の数だけ秘密鍵を管理しなければいけません。複数の相手に使い回しがきけば管理は楽ですが、そういうわけにもいかない。
しかも、事前に鍵を渡しておく必要がありますから、インターネットのような不特定多数の相手を対象に通信する分野では、かなり利用に無理があると言えます。
55
共通鍵暗号方式の脆弱性を解消したのが、公開鍵暗号方式。
大きな特徴は「一般に広くばらまいてしまう」ための公開鍵という公開用の鍵があること。
また、自分用の鍵のペアを1セット持っていれば複数人とやり取りできますから、「管理する鍵の数が増えちゃって大変!」なんてこともありません。
ただし、共通鍵暗号方式に比べて、公開鍵暗号方式は暗号化や復号に大変処理時間を要します。そのため、利用形態に応じて双方を使い分けるのが一般的です。
56
公開健暗号方式の技術を応用することで、「途中で改ざんされていないか」と「誰が送したものか」を確認できるようにしたのがデジタル署名です。
仕組みは、秘密鍵である人が暗号化したとする。そして受取人が公開鍵で複合する。やってることは公開鍵暗号方式の逆。こうすることで送り主しかもっていない秘密鍵で暗号化されたデータを、複合することができれば、それは送り主が秘密鍵を持っている人ということが確定するというもの。実際には本文全体を暗号化するのではなく、ハッシュ化という手法で短い要約データ(メッセージダイジェスト)を作成し、それを暗号化することでデジタル署名とします。
57
ところでこれまで、「鍵が証明してくれる」「鍵によって確認できる」ということを述べていますが、そもそも「ペアの鍵を作った人物がすでにニセモノだった」場合はどうなるのでしょうか。
一見キリがありませんが、それができてしまう限りは「他人になりすまして通信を行う」なりすまし行為が回避できるとは言い切れません。
というわけで、信用できる第3者が「この公開鍵は確かに本人のものですよ」と証明する
機構が考えられました。それが認証局 (CA:Certificate Authority)です。
このような認証機関と、公開鍵暗号技術を用いて通信の安全性を保証する仕組みのこと
を、公開鍵基盤(PKI:Public Key Infrastructure) と呼びます。
58
ここまで、ネットワークの通信経路上にひそむ危険(盗聴・改さん・なりすまし)や、そこで用いられる暗号化技術についてふれてきました。
では実際にそれらを用いてどのような手順で暗号化通信を行うのか。それを定めたものが暗号化プロトコルです。代表的なものにSSL(Secure Sockets Layer)があります。SSLで行う通信は、簡単に言うと写真のようなステップを経ることで、安全な通信を行います。
たとえばWWWサービスでは、サーバとクライアントのやり取りにHTTPというプロトコルが使われます。これにSSLの暗号化通信を追加したプロトコルがHTTPSです。このプロトコルを使って情報をやり取りすることで、オンラインショッピングで用いるクレジットカード番号や入力した会員情報の漏洩などが防止できるわけです。
なお、現在SSLは後継であるTLS(Transport Layer Security)に置き換わっていますが、TLSだと馴染みがないので、SSLとひとまとめに呼称されていたり、SSL/TLSという表記が用いられたりしています。
59
ネットワーク上に仮想的な専用線空間を作り出して拠点間を安全に接続する技術、もしくはそれによって構築されたネットワークのことをVPNと言います。
インターネットVPNを利用するには、相互の接続口にVPN機能を持った機器を設置します。
インターネット経由でデータを流す場合には、VPN装置がデータを暗号化してから流します。受け取った側では、その暗号化を解除してから内部ネットワークへ転送します。このように途中経路での通信データを暗号化することで、情報の漏洩や改ざんといった
危険を回避することができるのです。
60
ネットワーク層で動作するIP通信に、暗号化や認証機能を持たせることで、より安全に通信を行えるようにしたプロトコルとしてIPsecがあります。VPN (Virtual Private
Network)を構築する際の標準的なプロトコルです。
IPsecは、IPバケットを暗号化することによって、改ざんや盗聴の危険から通信データを守ります。ネットワーク層でセキュリティを確保するため、上位層のアプリケーションが暗号化をサポートしていなくても安全性が保たれます。
61
IPSecには、認証機能を担当する「認証ヘッダ(AH: Authentication Header)」と、暗号化機能を担当する「暗号ベイロード (ESP:Encapsulating Security Payload)」という2つのプロトコルが規定されています。
62
システムの一生というのは上のイラストのようになっていて、導入後の運用ペースになって以降も、業務の見直しや変化に応じてちょこちょこ修正が入ります。そうして運用と保守とを繰り返しながら、やがて役割を終えて酸楽される時間まで働き続けることになる。これを、ソフトウェアライフサイクルと呼びます。
システム化計画として企画段階で検討すべき項目はスケジュール、体制、リスク分析、費用対効果、適用囲といった5項目。うん、わかり難いですね。もうちょっと噛み砕いて書くと、「導入までどんな段取りで」「どういった人員体制で取り組むべきで」「どんなトラブルが
想定できて」「かけたお金に見合う効果があるか考えて」「どの業務をシステム化するか」・・
を決めるという内容になります。
企画が済んだら、次は「どのような機能を盛り込んだシステムが必要なのか」を要件定義として固めます。これをやらないと、「要するにポクたちこんなシステムが欲しいんです」と伝えられないですからね。
え?誰に伝えるか?それは、実際に開発をお願いすることになるシステムベンダさんなのです!…というところで次ページへ。
63
情報提供依頼
情報提供依頼書
(RFT: Request For Infer mation)
を渡して、最新の等入事例などの提供をお願いします。
提案依頼書の作成と提出
システムの内容や予算などの
謡条件を提安イ藤幸
(RFP: Request For Proposal)
にまとめて、システムベンダに提出します。
提案書の受け取り
システムベンダは具体的な内容を提索書としてまとめ、発注側に渡します。
見積書の受け取り
提案内容でOKが出たら、肉発や運用・保守にかかる費用を見積書にまとめて発注側に渡します
システムベンダの選定
提案内容や見積内容を確認して、発注する
システムベンダを決定します。
64
無事に契約が締結されたなら、今度はシステムベンダさんのところで実際の開発作業がはじまります。「要件定義プロセス→開発プロセス」という流れがスタートとなるわけですね。
システムの開発は、以下の工程に従って行われるのが一般的です。
基本計画(要件定義)
利用者にヒアリングするなとして求められる機能や性能を洗い出す。
システム設計
要件定義の結果に基いてシステムの詳細な仕様を固める。複数の段階に分けて、大枠から詳細へと、細分化しながら詰めて
いくのが一般的。
こんな風に一
外部設計
↓
内部故計
↓
プログラム設計
プログラミング
プログラミング言語を使って、設計通りに動くプログラムを作成する。
テスト
作成したプログラムにミスがないか、仕様通り作られているか検証する。
検証は設計の並で、詳細から大枠へと、さかのぼる形で行うのが一般的。
一運用テスト
•
下から上へなのです
↑
システムテスト
↑
結合テスト
単体テスト
導入・運用
固題がなければ発注元にシステムを納入して、運用を閉始する。
65
基本計画 (要件定義)
この工程では、作成するシステムにどんな機能が求められているかを明らかにします。
要点を明確にするためには、利用者へのヒアリングが欠かせません。そのため、システム開発の流れの中で、もっとも利用部門との関わりが必要とされる工程と言えます。
要件を取りまとめた結果については、要件定義書という形で文書にして残します。
66
情報システムは、業務機能を実現するアプリケーション部分と、それを支えるシステム
盤によって構成されます。ヒアリングによって利用者から得られる要求事項は主に業務機を
を担う部分です。これを機能要件と言います。
たとえば…..
受発注処理
在庫管理
出荷処理
人金確認
業務機能を
実現する
アプリケーション部
こっち側の肆ポが
楼能要件
これらの機能要件以外、ざっくり言えば、システム基盤側の要件が非機能要件にあたります。
どのようなOSや
上記を支える
システム盤
ミドルウェアを用いるのか
どのような
ハードウェア様ボと
ての
ネットワーク機器は何を用いるのか
「どうするか
こっち後の
壱ポが
非機能重
67
広義の非機能要件は「機能要件以外のすべて」であり、その定義は様々です。
そこで、主に「システム基盤で実現される要件」に着目したものを、独立行政法人情報処理推進機構(IPA)では、「非機能要求グレードの6大項目」として次のように規定しています。
可用性
システムサービスを継続的に利用可能とするための要求
・運用スケジュール(稼働時間、停止子
定など)
・障害、災害時における稼動目標
性能·拡張性
システムの性能、および将来のシステム
拡張に関する要求
・業務量および今後の増加見張り
・システム化対象業務の特性(ピーク時、通常時、縮退時など)
システムの運用と保守のサービスに関
・運用中に求められるシステム費し
運用・保守性
ベル
する要求
・問題発生時の対応レベル
「. 新システムへの移行期間および移行
移行性
現行システム資産の移行に関する要求
方法
・移行対 資産の種類および移行量
情報システムの安全性の確保に関する
•利用制限
セキュリティ
要求
・不正アクセスの防止
・耐費/免震、重量/空間、温度/温度、長
システム環境・
エコロジー
システムの設置環境やエコロジーに関する要求
音など、システム環境に関する事項
.CO:携出量や消費エネルギーなど、エコロジーに関する事項
68
システム設計
この工程では、要件定義の内容を具体的なシステムの仕様に落とし込みます。
こんなことしたい」という漢然とした要求を、「具体的にこんな画面で」とか
•「ボタン押したらこんな
処理が走って」い
とか、ガッチリ周め
ちゃうのです。
システム設計は、次のような複数の段階に分かれています。
外部設計
外部設計では、システムを「利用者側から見た」設計を行います。つまり、ユーザイン
タフェースなど、利用者が実際に手を触れる部分の設計を行います。
内部設計
内部設計では、システムを「開発者から見た」設計を行います。つまり、外部設計を実現するための実装方法や物理データ設計などを行います。
プログラム設計
プログラム設計では、プログラムを「どう作るか」という視点の設計を行います。プログラムの構造化設計や、モジュール同士のインタフェース仕様などがこれにあたります。
69
プログラミング
この工程では、システム設計で固めた内容にしたがって、プログラムをモジュール単位で作成します。
プログラムの作成は、プログラミング言語を使って命令をひとつひとつ記述していくことで行います。この、「プログラムを作成する」ということを、プログラミングと呼びます。
私たちが使う言葉にも日本語や英語など様々な種類の言語があるように、プログラミング言語にも横々な種類が存在します。こうして書かれたソースコードは機械語に割訳することで、プログラムとして実行できるようになります。
70
テスト
この工程では、作成したプログラムにミスがないかを検証します。
テストは、次のような複数の段階に分かれています。
単体テスト
単体テストでは、モジュールレベルの動作確認を行います。
結合テスト
結合テストでは、モジュールを結合させた状態での動作確認や入出力検査などを行います。
システムテスト
システムテストでは、システム全体を稼働させての動作確認や負荷試験などを行います。
運用テスト
運用テストでは、実際の運用と同じ条件下で動作確認を行います。
71
システム開発手法は、「ウォータフォールモデル」、「プロトタイピングモデル」、「スパイラルモデル」の3つ。
システムに対する要求を確認して、設計して、作って、テストする。この段取りは、システム開発に限らず、たいてい何をする場合にも同じです。基本的な段取りは共通ながら開発手法に様々な種類があるのは、思ってたのと違うとなることもあったりして「頭の中で想像したシステム」と「実際にさわってみたシステム」というのは違う印象になりがちですし、開発者側が仕様を取り違える可能性だってないとは言えない。こうした問題を解消して、効率よくシステム開発を行うための工夫に他なりません。
72
ウォータフォールモデルは、開発手法としてはもっとも古くからあるもので、要件定義からシステム設計、プログラミング、テストと、各工程を順序よく進めていくものです。水が高いところから
低いところへと落ちていくように
各工程を順番に進めていくのが特徴です。
メリット
それぞれの工程を完了させてから次へ進むので管理がしやすく、大規模開発などで広く使われています。
デメリット
必然的に、利用者がシステムを確認できるのは最終段階に入ってからです。しかも、前工程に戻って作業すること(手戻りといいます)は想定していないため、いざ動かしてみて「この仕様は想定していたものと違う」なんて話になると、とんでもなく大変なことになります。
73
プロトタイピングモデルは、開発初期の段階で試作品(プロトタイプ)を作り、それを利用者に確認してもらうことで、開発側との意識ズレを防ぐ手法です。
メリット
利用者が早い段階で(プロトタイプとはいえ)システムに触れて確認することができるため、後になって「あれは違う」という問題がまず起きません。
デメリット
ただ、プロトタイプといっても、作る手間は必要です。そのため、あまり大規模なシステム開発には向きません。
74
スパイラルモデルは、システムを複数のサブシステムに分割して、それぞれのサブシステムごとに開発を進めていく手法です。個々のサブシステムについては、ウォータフォールモデルで開発が進められます。
完成したサブシステムに対する利用者の声は、次のサブシステム開発にも反映されていくため、後になるほど思い違いが生じ難くなり開発効率が上がります。
75
開発作業の各工程では、その工程完了時にレビューという振り返り作業を行います。ここで工程の成果物を検証し問題発見に努めることで、潜在する問題点を早期に発見し次のエ程へと持ち越さないようにするのです。
レビューは基本的にミーティング形式で行われ、人の目視など机上にて問題を発見する取り組み。
76
レビューを実施する手法には次のようなものがある。
ウォークスルー
問題の早期発見を目的として、開発者(もしくは作成者)が主体となって複数の関係者とプログラムや設計書のレビューを行う手法。
インスペクション
あらかじめ参加者の役割を決め、進行役として第三者であるモデレータがレビュー責任者を務めてレビューを実施する手法。
ラウンドロビン
参加者全員が持ち回りでレビュー責任者を務めながらレビューを行う手法。参加者全体の参画意欲を高める効果がある。
77
CASE (Computer Aided Software Engineering)とは、「コンピュータ支援ソフトウェア工学」の意味。コンピュータでシステム開発を支援することにより、その自動化を目指すという学問です。
この考えに基づき、システム開発を支援するツール群がCASEツールです。
CASEツールは、それが適用される工程によって、次のように分類することができます。
上流CASEツール
上流工程の支援を行うツール群で、システムの分析や設計を支援する。
下流CACEツール
下流工程の支援を行う
ツール群で、プログラムの自動生成ツールやテスト支援ツールなどがある。
保守CASEツール
保守を支援するためのツール。
「既存のプログラムを解析して元の設計仕様を探るリバースエンジニアリング」などのリエンジニアリング機能はこれにあたる。
肉発に関する情報は、リポジトリと呼ばれるデータベースで二元管理します
78
前節で紹介した3つ以外の開発手法を見ていくことにします。
RAD (Rapid Application Development)
「Rapid」とは「迅速な」という意味。つまり直訳すると「迅速なアプリケーション開発」となる言葉の略語がRADです。
エンドユーザーと開発者による少人数構成のチームを組み、開発支援ツールを活用するなどして、とにかく短期間で開発を行うことを重要視した開発手法です。
開発支援ツール (RADツール)として有名なところでは、たとえばVisual Basicなどのビジュアル開発環境が該当します。
RADでは、プロトタイプを作ってそれを評価するサイクルを繰り返すことで完成度を高めます。ただし、このフェーズが無制限に繰り返されないよう、開発の期限を設けることがあります。これをタイムボックスと呼びます。
タイムボックスを過ぎると、強制的に次の工程へと進みます。その時点で固まっていない要求については開発を行いません。
79
アジャイルとXP (eXtreme Programming)
スパイラルモデルの派生型で、より短い反復単位(週単位であることが多い)を用いて迅速に開発を行う手法の総称がアジャイルです。アジャイル型の開発では、1つの反復で1つの機能を開発し、反復を終えた時点で機能追加されたソフトウェアをリリースします。
80
アジャイル型の代表的な開発手法がXP (eXtreme Programming)です。少人数の開発に適用しやすいとされ、既存の開発手法が「仕様を固めて開発を行う(後の変更コストは大きい)」であったのに対して、XPは変更を許容する柔軟性を実現しています。
81
XPでは、5つの価値と19のプラクティス(実)が定義されています。そのうち、開発のプラクティスとして定められているのが次の6つです。
テスト駆動開発
実装前にテストを定め、そのテストをパスするように実装を行う。テストは自動テストであることが望ましい。
ペアプログラミング
2人1組でプログラミングを行う。
1人がコードを書き、もう1人がそのコードの検証役となり、随時互いの役割を入れ替えながら作業を進める。
リファクタリング
完成したプログラムでも、内部のコードを随時改善する。冗長な構造を改めるに留め、外部から見た動作は変更しない。
中身は常にブラッシュアップ
ソースコードの共同所有
コードの作成者に断りなく、チーム内の誰もが修正を行うことができる。その代わりに、チーム全員が全てのコードに対して責任を負う。
継続的インテグレーション
単体テストを終えたプログラムは、すぐに結合して結合テストを行う。
YAGNI
「You Aren't Going to Need It.」の略。
今必要とされる機能だけのシンプルな実装に留める。
82
既存ソフトウェアの動作を解析することで、プログラムの仕様やソースコードを導き出すことをリバースエンジニアリングと言います。その目的は、既にあるソフトウェアを再利用することで、新規開発(もしくは仕様書が所在不明になっているような旧来システムの保守)を手助けすることです。一方、これによって得られた仕様をもとに新しいソフトウェアを開発する手法を、フォワードエンジニアリングと言います。
しかし、元となるソフトウェア権利者の許可なくこれを行い、新規ソフトウェアを開発・販売すると、知的財産権の侵害にあたる可能性があるため注意が必要です。
83
公開されている複数のサービスを組み合わせることで新しいサービスを作り出す手法をマッシュアップと言います。Webサービス構築のためによく利用されています。
84
業務をシステム化するにあたっては、対象となる業務をモデル化して分析することが大事です。このモデル化を使って業務分析を行います。利用者側の要求を汲み取り、システムが実現すべき機能の洗い出しを行うために使われるわけですね。
代表的なのはDFDとE-R図の2つ。
DFDはData Flow Diagramの略。その名の通り、データの流れを図としてあらわしたものです。次のような記号を使って図示します。
○ プロセス
データを加工したり変換したりする処理を表す
□ データの源泉と吸収
データの発生元や最終的な行き先を表します。
→ データフロー
データの流れ
= データストア
ファイルやデータベースなど、データを保存する場所
たとえば下の業務を例とした場合、DFDであらわされる図は次のようになります。
顧客から注文がありました。受注。
在庫管理して大丈夫でした。在庫確認。
出荷してもらいました。出荷指示。
売上に計上しました。売上計上。
85
E-R図は、実体 (Entity: エンティティ)と、実体間の関連 (Relationship: リレーションシップ)という概念を使って、データの構造を図にあらわしたものです。
実態は四角形、関連は矢印。
関連をあらわす矢印は、「そちらから見て複数か否か」によって矢じり部分の有りなしが決まります。
会社から見た時、社員は複数名存在します。この場合は先頭に矢尻がつく。
お互いが対等な時、例えば、社員から見た時、会社は一つです。この場合、矢尻はつきません。
関連には「1対多」の他に、「1対1」「多対多」などのバリエーションが考えられます。例としてあげると、次のような感じになります。画像参照
パターン1。会社と社員は1対、多
会社にはたくさんの社員が所属しています
パターン2。当然逆もあって、社員と会社は、多、対1
パターン3。社員と社員番号は1対1
社員番号は1人の社員に対して、一つの固有番号が割り当てられます
パターン4。商品と仕入れ先は多、対、多。複数の商品を複数の仕入れ先から調達している場合です。
86
ユーザからの入力をどのように受け付けるか、ユーザに対してどのような形で情報を表示するか、どのような形で情報を出力として用意するか・・などなど、これらすべてが、ユーザインタフェースというわけです。
ユーザが実際にシステムを操作する部分にあたりますから、システムの使いやすさはこの出来に大きく左右されます。したがって、システムの外部設計段階では、「いかにユーザ側の視点に立って、これらユーザインタフェースの設計を行うか」が大事となります。
87
昔は画面に表示されるのは文字だけで、そのコンピュータに対して入力するのも文字だけ。文字を打ち込むことで命令を伝えて処理させていたのです。このような文字ベースの方式をCUI (Character User Interface)と呼びます。
現在では、より誰でも簡単に扱えるようにと、「画面にアイコンやボタンを表示して、それをマウスなどのポインティングデバイスで操作して命令を伝える」といった、グラフィカルな操作方式が主流になっています。このような方式をGUI (Graphical User Interface) と呼びます。
88
GUIでは、次のような部品を組み合わせて操作画面を作ります。
代表的な部品の名前と役割は覚えておきましょう。画像参照
まず基本となるのがウインドウ
これがアプリケーションの基本領域で、この上に部品を配して、操作画面を作ります。
メニューバー
アプリケーションを操作するための項目が並んだメニューです。
細日をおさめたプルダウンメニューが
羅列されています。
プルダウンメニュー
クリックすると、下に垂れ下がって表示されるメニューです。
テキストボックス
文字入力用の短形領域です。
チェックボックス
選択肢を複数選択したり、特定の項目をオン/オフさせるといった用途に使います。
ラジオボタン
複数ある選択肢の中から、1っだけを飛ばせたい時に使います。
89
使いやすいユーザインタフェースを実現するため、画面設計時は次のような点に留意する必要があります。画像参照
入力は自然な流れとなるように、左から右、上から下へとフォーカスを移動させる。
「重要項目は赤!」などのように。
画面上で用いる色づかいに
ルールを持たせる。
選択肢の数が多いときは、選択肢をグループ分けしたり階展化したりして選びやすくする。
画面ごとのレイアウトや
入力パターンを共通化させる。
入カミスに対してはエラーメッセージを表示して、原因と対処法とをわかりやすく箇潔に提示する。
不慣れな利用者のために
ヘルプなどの操作がイダンスを用意する。
90
システムの処理結果は、多くの場合帳票として出力することになります。この帳票も、次のような点に留意して設計する必要があります。画像参照
各帳栗の基本しイアウトを共通化させることで読みやすくする。
関連する項目は隣接した場所に配置する。
記載する情報は最小限に留めて、ムダにゴチャゴチャさせない。
91
システム内で扱うデータには、何らかのコードを割り当てて管理することがよくあります。例えば、社員コード、商品コード、備品コード、顧客コード。なぜそんなことをするかというと、同じ名前があっても確実に識別する為とか、コードに置きかえることで長ったらしい面品名を入力しなくて済む」であるとか、「コードの割り振り方によって商品の並び替えや分類が簡単に行えるようになる」とか、「入力時のりを検出することができる」とか、システムを活用する上で様々な利点があったりするのです。
92
コード設計を行う際は、次のようなポイントに留意します。
何をコード化の対象とするのか、
どのような規則のコードとするのか、
コードの桁数はいくつにするか、
コード設計で定めたルールは、運用を開始した後になるとなかなか変更することができません。したがって、システムが扱うであろうデータ量の将来予測などを行って、適切な桁数や割り当て規則などを定める必要があります。
コードの桁数が少ないと、
うちみたいな零細は年に2桁も用意してりゃじゅうぶんですわ→か、会社が大成功して、今年の新入社員3桁とか言ってるよ…
じゃあ多ければいいのかと言うと、
前回の反省をいかして今度は10桁にしてみましたよ→覚えづらくて記述ミス連発で、使えないって怒られた
93
チェックディジットというのは、誤入力を判定するためにコードへ付加された数字のことです。画像参照
たとえばこんな6桁のコードがあったとして、社員番号961234。
社員証にバーコードのっけたいから読み取り不良判定用にチェックデジット付加するぜ!ってことになったとする。
そしたらこんな感じでルールを決めちゃう。よし、全ての数を足して961234=25。
それを10で割った時の余りをコードの末尾に付加しよう。
25-10の余は5。
これがチェックデジット。
これをどう活用するかというと、
あとは算出したチェックディジットと
読み取り結果に付加されてるチェックディジットを見比べて、一致すれば読み取りがされ、不一致なら失敗とするわけです。
94
コードには次のような種類がある。
順番コード。
連続した番号を順番に付与していくコード体系です。
区分コード。
対象をいくつかのグループに分け、そのグループごとに連続した番号を付与するコード体系です。
けた別コード
けたごとに意味を持たせたコード体系です。大分類・中分類・小分類といった意味をけたに付与して階層化することができます。
表意コード(ニモニックコード)
項目の意味をあらわず路称や記号などによって表現するコード体系です。コードを見ただけで内容を推測しやすいという特徴を持ちます。
95
誤ったデータや通常では有り得ない入力というのは、システムの誤動作や内部エラーを引き起こす元となります。
したがって問題を未然に防ぐためには、できる限り入力の時点で「間違った入力に対してはエラーを表示する」とか、「そもそも入力されてはいけない文字を受け付けない」といった対策を施すことが求められます。
前ページで述べたチェックディジットもそうした対策のひとつですが、入カチェックには他にも様々な種類があります。主なチェック方法を覚えておきましょう。
ニューメリックチェック。
数値として扱う必要のあるデータに、文字など数値として扱えないものが含まれていないかをチェックします。
シーケンスチェック。
対象とするデータが一定の順序で並んでいるかをチェックします。
リミットチェック。
データが適正な範囲内にあるかをチェックします。
フォーマットチェック。
データの形式(たとえば日付ならyyyy/mm/ddという形式で・など)が正しいかをチェックします。
照合チェック。
登録済みでないコードの入力を避けるため、入カされたコードが、表中に登録されているか照合します。
論理チェック。
販売数と在庫数と仕入数の関係など、対となる項目の値に矛盾がないかをチェックします。
重複チェック。
一意であるべきコードなどが、重複して複数個登録されていないかをチェックします。
96
各プログラムをモジュールという単位に分解・階層化させることを、プログラムの構造化設計と言います。
シンプルで保守性に優れたプログラムを作るためには、構造化設計が欠かせません。そのためのモジュール分割技法には、「データの流れに着目」した技法と、「データの構造に着目」
した技法の2グループがあります。
データの流れに着目。
・STS分割法
・トランザクション(TR)分割法
••共通機能分割去
データの構造に着日。
・ジャクソン法
・ワーニエ法
人の名前がついてるやつはデータ構造に着目して分割するんだぐらいに覚えておけばおけ
97
プログラムをモジュールに分けると何がうれしいかというと、次のようなメリットが得られるところです。
作業が分担できる。
複数人で並行してプログラミング作業を進めることができます。
再利用が容易。
「共通する機能を部品として
使いまわすことができます。
修正が一部で済みます。
欠陥のあるモジュールを修正することで、プログラムが改修できます
98
分割技法のうち、「データの流れ」に着目した技法は次の3種類です。
STS分割法。
プログラムを「入力処理(源泉:Source)」、「変換処理(変換:transform)」、「出力処理(吸収:Sink)」という3つのモジュール構造に分割する方法です。
商品コードを読み取って(入力処理)、そのコードを元に商品価格を取得(変換処理)、画面に表示する(出力処理)。
99
トランザクション分割法。
プログラムを一連の処理(トランザクション)単位に分割する方法です。
例えば、
基本給の更新、手当の更新、控除の更新に関する伝票を個別に受け付け、給与計算用のファイルを更新するプログラム、を分割すると、画像参照
100
共通機能分割法。
プログラム中の共通機能をモジュールとして分割する方法です。
共通モジュールとして切り出すことで、類似機能を重複して作る心事がなくなります。画像参照