セキュリティの実装技術②

リモートアクセス

RAS
  • Remote Access Service
  • インターネット経由で社内LANにアクセスするリモートアクセスではファイアウォールが存在するため、正規のユーザーかどうかを確認する
  • ダイヤルアップ(電話をかけて回線を接続すること)でRASサーバに接続
  • RASサーバは発信者の電話番号やパスワードで正規のユーザーか確認してからLANに接続する
RADIUS
  • Remote Authentication Dial In User Service
  • リモートアクセスの際の利用者の認証を行うプロトコル
  • RASサーバとは別にRADIUSサーバを認証サーバとして設け、より安全性を高める
  • そのほか、ユーザの利用状況の把握やアクセス権の管理などにも利用する

VPN

安価な公衆網を、暗号化技術などを用いて仮想的な専用線として利用する。

  • 電気通信事業者が持つIP網を利用するIP-VPN
  • インターネットを利用したインターネットVPN
  • 自宅側のVPNサーバと会社側のVPNサーバの間に、第三者がアクセスできない仮想トンネルを構築(トンネリング)し、リモート接続を可能にする

無線LANの暗号化

無線LANは機器が出す電波が届く範囲なら誰でも受信できるため、ファイアウォールに加えて盗聴などを防ぐ必要がある。

WEP
  • Wired Equivalent Privacy
  • 初期の無線通信の暗号化
  • アクセスポイントと無線LANカードの間の電波通信を暗号化する
  • すでに脆弱性が指摘されている(クラッキングソフトによってある程度平文を推定できる)
WPA2
  • Wi-Fi Protected Access2
  • 暗号化方式には、より安全性の高いCCMPを
  • 暗号化アルゴリズムには、より強度の高いAES暗号方式を採用

データベースセキュリティ

  • データベースの暗号化
    • 格納されている重要なデータや個人情報に対して暗号化
    • 全データに対して暗号化処理を行うとスループットの悪化やサーバ負荷の増大につながるため、特定部分に限定する
  • データベースのアクセス制御
  • 障害時の復旧
    • バックアップが重要
    • 分散処理や多重化構成を行う場合は、それぞれのデータベースの整合性も考慮
  • ログの取得
    • 障害の復旧や原因の究明、不正アクセスの痕跡を調べるためには、アクセスログの取得が効果的

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

WAF
  • Web Application Firewall
  • webアプリケーションを攻撃から守る機器/ソフトウェア
  • ユーザ入力などの通信内容を、あらかじめ設定した検出パターンに基づいて検査
  • ブラウザとwebサーバの間に設置する
    • 複数のwebアプリケーションをまとめて保護できる
セキュアプログラミング
  • 外部入力のデータは全て検査する
  • 外部出力するデータは問題を起こさないよう加工する
  • シンプルな設計にする
  • 許可ではなく拒否ベースでアクセスを決める
脆弱性低減技術
  • ソースコード静的解析
  • プログラムの動的検査
    • プログラムを実行した結果を解析して行う検査
    • 代表的な攻撃手法を送信し、特徴的な応答を観察する脆弱性診断がある
  • ファジング
    • 通常ではあり得ないデータや、問題を起こしそうなデータを入力し、バグや脆弱性を見つけ出す手法

セキュリティの実装技術①

セキュアプロトコル

IPsec
  • Security Architecture For Internet Protocol
  • IP層で安全に通信を行うためのプロトコル
  • 通信データの盗聴や改竄を防ぐことができる
  • AH(Authentication Header)
    • パケットが改ざんされていないかどうか認証を行う。(HMAC)
    • パケットの暗号化はできない
  • ESP(Encapsulating Security Payload)
    • パケットが改ざんされていないかどうか認証を行う。(HMAC)
    • パケットのペイロード部の暗号化 ( DES or 3DES or AES ) を行う。
  • IKE(Internet Key Exchange)
全部ESPでいいのでは?

ESPが全てのセキュリティサービスを実装できるにも関わらず、AHも実装させることがある理由 - ESPの認証トレーラ機能では、IPヘッダの部分まではその完全性を保証することはできない - AHがESPより負荷がかからない、AHに輸出規制がない、AHはIPv6コンプライアンスに必須である

SSL/TLS
  • Secure Socket Layer/Transport Layer Security
  • ブラウザとwebサーバ間で認証と暗号化通信を行うためのプロトコル
  • TLSSSLをベースにRFC2246として文書化されたもの
    • SSL3.0以降のバージョンはTLSになる
    • SSL/TLS知名度の高いSSLをそのまま残した表記
HTTPS
  • Hypertext Transfer Protocol Secure
  • SSL/TLSを利用してHTTP通信に暗号化機能を追加したもの
SSH
  • Secure Shell
  • 暗号化と認証により、ネットワークを介した別のコンピュータやネットワーク機器の遠隔操作を安全にする

認証プロトコル

SPF
  • Sender Policy Framework
  • SMTPを利用したメール送受信で、送信者のドメイン偽装を防ぎ、正当性を検証する
  • DNSサーバを照会し、送信元のメールサーバのIPとSMTP接続元のIPを比較
DKIM
  • DomainKeys Identified Mail
  • 受信した電子メールが「正当な送信者から送信された改竄されていないメール」かどうかを検証できる送信ドメイン認証技術
  • メール送信時に秘密鍵で生成した署名をヘッダに添付し、受信時に署名ドメインDNSサーバの公開鍵で署名を検証する
SMTP-AUTH
  • SMTP Authentication
  • SMTPにユーザ人相機能を追加したもの
OAuth
  • 複数のwebサービスを連携して動作させるための仕組み
  • あらかじめ信頼関係を構築したサービス間で、ユーザの同意のもとユーザ権限を受け渡す
  • 異なるwebサービス間でIDやパスワードを再入力することなく、連動させられる

ネットワークセキュリティ(ファイアウォール

パケットフィルタリング
  • 不正なパケットを通信させないようにする
    • IPヘッダ情報から送信元IPと宛先IPを抽出し、ポート番号ごとに通信の許可/不許可を判断する
    • これらを元に、ルータ内のフィルタリングテーブルにあらかじめ通信ルールを設定してパケットの通過/廃棄を決める
アプリケーションゲートウェイ
  • 社内LANとインターネットとの間にプロキシサーバを設置し、インターネットとのやりとりを全てプロキシサーバを通して行う
    • LAN内部から接続要求があると、クライアントに代わってプロキシサーバのIPを使ってアクセスを行う
    • 逆に、サーバから送信されたデータは一旦プロキシサーバが受け取り、要求元のクライアントに結果を返す
  • コンテンツフィルタリングが可能
  • アクセスの高速化が可能
    • インターネットからのデータをプロキシサーバのキャッシュに保存できる

ネットワークアーキテクチャ

OSI基本参照モデル

第1層:物理層
  • 信号およびバイナリ転送
    • ハードウェアのコネクタ形状やピン数などの物理的な接続を定める
第2層:データリンク層
第3層:ネットワーク層
IP(Internet Protocol)
  • IPアドレスを接続するコンピュータ機器に付与し、機器同士を通信
  • これを用いて、直接つながっていないネットワーク間でパケットをルーティング
  • この働きによりコンピュータ機器が直接つながっているかどうかを問わず任意のコンピュータとの通信が実現できる
第4層:トランスポート層
  • 通信の品質のコントロール
    • ex: TCPによる通信の信頼性の担保
    • ex: UDPによる速度の担保
TCP(Transmission Control Protocol)
  • データを送信する前に、送信側と受信側で論理的な通信路を確立する
UDP(User Datagram Protocol)
  • 「データが相手に届いたか」という確認を省略し、速度を重視する
第5層:セッション層
  • 通信の開始・維持・終了の手順の規定
    • ex: SSLによるセキュリティ確保
第6層:プレゼンテーション層
  • アプリケーション層のデータを共通な形に変換
    • ex: SMTPによるメール伝送でのデータ変換
    • ex: FTPによるファイル伝送でのデータ変換
第7層:アプリケーション層
  • アプリケーションが持つ通信機能の仕様や手順を定める

TCP/IP

OSI基本標準モデルよりも現実的・効率的なものとしてデファクトスタンダードになったもの。

第1層:ネットワークインターフェース層
  • OSIの第1、第2層に相当。
第2層:インターネット層
  • OSIの第3層に相当。
第3層:トランスポート層
  • OSIの第4層に相当。
第4層:アプリケーション層
  • OSIの第5、第6、第7層に相当。

ハードウェアと論理回路

組み合わせ回路

入力する二つの値の真/偽の組み合わせによって、出力値の真/偽が決まる。

  • AND回路
    • 入力値が二つとも真ならば真
  • OR回路
    • 入力値のどちらかが真ならば真
  • NOT回路
    • 入力値は1つ。入力値の逆を出力する
  • NAND回路
    • AND回路の逆を出力する
    • 入力値が二つとも真ならば偽
  • NOR回路
    • OR回路の逆を出力する
    • 入力値のどちらかが真ならば偽
  • XOR回路

順序回路

フリップフロップ回路

現在の入力と過去の入力の両方によって出力が決定する

入力 入力 出力 出力
機能 S R Q Q#
セット H L H L
リセット L H L H
保持 L L Q0 Q0#
禁止 H H L L

加算回路

半加算器
  • 1桁の2進数の加算を行う回路。

入力値aとbを加算。dは結果、cは桁上がりを示す。

入力 入力 出力 出力
a b c d
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
全加算器
  • 入力に下位桁からの桁上がりを含め、1桁の2進数の加算を行う回路。

下位桁からの桁上がりc'と入力値a, bを加算。dが結果、eが桁上がりを示す。

入力 入力 入力 出力 出力
c' a b e d
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
3入力多数決回路
  • 3つの入力のうち、2つ以上同じであればその値を出力する。
入力 入力 入力 出力
a b c y
0 0 0 0
0 1 0 0
1 0 1 1
1 1 1 1

機械電子制御

ハードウェアの動作をコンピュータで制御すること。

シーケンス制御

決められた動作に従って、制御を進めていく方式。

フィードバック制御

あらかじめ設定された目標値と現在の状況を比較し、両者を一致させるように制御を行っていく方式。

サーボ制御

ロボット制御や工作機器の制御など、位置や角度が目標値にきっちりと決まるように制御を行う

プロセス制御

製鉄や化学工場の製造工程で、温度や圧力が目標値に収まるように制御を行う

PWM制御
  • Pulse Width Modulation
  • 電力制御に用いられる
  • 一定電圧のオンオフをパルスによって行い、オンオフ比率(パルス幅)を変えることで電流を制御する

言語処理ツール

言語プロセッサ

ソースコードを翻訳し、機械語目的プログラムを生成する。

アセンブラ

アセンブラ言語(機械語と一対一で対応する)を機械語に翻訳する。

コンパイラ

高水準・手続き型言語機械語に翻訳する。

インタプリタ

命令を一つずつ解釈し、その都度翻訳しながら即時に実行する。 - JavaScriptPythonRubyPHP、HTML、CSSなど多くのスクリプト言語で採用されている。

コンパイラによる実行工程

1. コンパイラによる翻訳
  1. 字句解析
    プログラムを表現する文字の列を、変数名、演算子予約語、定数、区切り記号など意味を持つ最小単位(トークン)の列に分解する。
  2. 構文解析
    字句解析で切り出されたトークンをプログラム言語の構文規則に従って解析する。
  3. 意味解析
    変数名の宣言とその使用との対応付けや、演算子と演算数の型の整合性など、構文解析ではチェックできない部分の解析を行う。
  4. 最適化
    実行時の処理効率が高くなるよう、レジスタの有効利用を目的としたレジスタ割付や、不要な演算を省略するためのプログラム変換(再編成)を行う。
  5. コード生成
    目的プログラムとして出力するコードを生成する。
2. リンカによる結合編集作業
  • コンパイル後の目的プログラムはそのままでは実行できない
  • プログラムが参照している他のモジュールを結合する作業(連携編集)が必要
  • 連携編集がエラーなく実行されると、実行形式のロードモジュール(実行ファイル)が出力される

インタプリタによる実行工程

  • 目的プログラムを作らない
    • プログラム全体を翻訳するのではなく、1命令ずつ取り出し、翻訳を行い、実行することを繰り返す。
  • プログラムが未完成でも動作可能
    • 完成したところまでをテスト的に実行させてみることができる
  • 実行速度が遅い
    • 1命令ずつ処理するため。

メモリ

メモリの種類

RAM
  • Random Access Memory
  • 電源を切ると情報は失われる(揮発性)
  • 読み書きが可能
DRAM
  • Dynamic RAM
  • 構造が単純で、大容量のものを比較的安価に製造できる
  • 主に主記憶装置に用いられる
  • コンデンサ電荷が溜まっているかどうかで0/1を判断する
    • 放置しておくと自然に放電してしまうため、一定時間間隔(数ミリ秒)でコンデンサを再充電(リフレッシュ動作)する必要がある
SRAM
ROM
  • Read Only Memory
  • 電源を切っても情報が保持される(不揮発性)
  • 基本的に読み込みだけが可能
マスクROM
  • 一般的なROM
  • 出荷時にデータが書き込まれており、内容の変更はできない
PROM
  • Programmable ROM
  • 後から書き込みが可能
    • 特殊な装置を使いユーザーが一度だけ書き込むことができる
    • 書き込んだものは消去できない
  • 基本的に読み出し専用
    • RAMに比べると書き込みに時間がかかるため、RAMほど頻繁に読み書きする用途には適していない
EPROM
  • Erasable PROM
  • 紫外線照射により内容の消去が可能で、再書き込み可能
EEPROM
  • Electrically Erasable PROM
  • 電気的にバイト単位での書き換えが可能
  • パソコンのBIOSや電子機器の制御プログラム格納に用いられる
フラッシュメモリ
  • EEPROMを改良し、ブロック単位または一括でのデータ消去、大容量化、書き込みの高速化を実現
  • SDメモリ、USBメモリファームウェアの格納に用いられる

メモリの誤り検出・訂正機能

パリティチェック
  • データの0と1の集まりのうち、1の個数が偶数か奇数かによって、ざっくりとした整合確認を行う
  • チェック用のパリティビット(1ビット)を用いて、元のデータの1の個数が偶数か奇数かを記録
  • 送り手側がパリティビットを付け、受け手側がパリティビットの内容と元のデータの1の個数をチェックする
  • エラーの検出は可能だが、訂正はできない
ECC
  • Error Correcting Code
  • より信頼性の高いエラー訂正機構
  • 例えば4ビットのデータに3ビットのチェック用ビットを付加した7ビットのハミングコードを作ることで、2ビットの誤り検出と1ビットの訂正が可能になる
    • 詳細はここでは割愛

システム構成

システム構成

  • デュアルシステム
    • 二つの系列で同一データの処理を行う
    • いずれかの系に障害が発生した場合はその系を切り離して処理を続行する
    • 高い信頼性と安全性を求められるシステムに適用される
  • デュプレックスシステム
    • 通常時は主系で主要業務を、従系でバッチ処理などリアルタイム性の低い業務を行う
    • 主系に障害が発生した場合は従系の業務を中断して主系に切り替える
  • マルチプロセッサシステム
  • クラスタコンピューティング
    • 複数のコンピュータをネットワークで相互接続し、全体として一つのコンピュータとして扱う

待機系

  • ホットサイト(ホットスタンバイ)
    • 同一環境を、データの同期を行いながら稼働させておく
    • 障害発生時に即時に切り替えができる
  • ウォームサイト(ウォームスタンバイ)
    • 同一環境を非稼働状態で用意しておく
    • 短時間で切り替えができる
  • コールドサイト(コールドスタンバイ)
    • 障害の発生段階でバックアップデータを元にシステム起動と環境構築を行う
    • 最も時間がかかる

RAID

RAID(Redundant Arrays of Inexpensive Disk)は、ディスク装置を複数台用いて、高速または信頼性の高いディスク装置を実現する技術。

RAID-0(ストライピング)
  • 2台以上のHDDを1つのドライブのように扱い、ブロック単位に分割したデータを複数のHDDへ分散して記録する
  • 複数のHDDに同時に並行してアクセスすることで、データの記録速度を高速化する。構成するHDDの本数が増えるほど高速化
  • 各HDDにはデータの一部分しか記録されないため、1台でもHDDが故障するとデータの読み書きができない
    • そのため、バックアップを確保できる他のRAIDレベルと組み合わせて使う傾向にある
RAID-1(ミラーリング
  • 2台のHDDに同一データを書き込む
    • 同一データを同時に書き込むという点でバックアップとは異なる
  • 耐障害性が高い
  • 2台のHDDに同じデータを持つため、扱えるデータ容量は構成するHDD全体の容量の半分以下になる
RAID-2
  • 元データとは別に、エラーを修復するための冗長コードを複数のHDDに書き込む
  • 元データの単位サイズがブロック(セクタ)単位ではなくbitまたはbyte単位である
  • 冗長コードは複数ビットのECC(Error Correcting Code:誤り訂正符号)である
    • 多ビットのECCによる冗長コードは、元のデータに対してそのサイズが大きくなりがちで、容量面でのオーバーヘッドが大きい
      • 例えば、元のデータを2台のHDDに分散するには、冗長コードを3台のHDDに書き込まなければならない
    • ECCの計算は、パリティよりも複雑で時間がかかるため、速度面でもオーバーヘッドは大きい
  • 以上のデメリットのため、一般的にRAID-2は用いられない
RAID-3
  • RAID-2と同様、元のデータに冗長コードを加えて複数のディスクに記録する
  • しかし、RAID-2とは違い冗長コードにパリティを用いる
  • パリティは特定のディスクに保存される(分散されない)
  • 高速化のためには、複数のディスクに対して同時に読み書きするための同期機能が必要であり、コスト面から不利であるためそれほど実用化されていない
RAID-4
  • RAID-3と同様、元のデータとパリティデータを保存する
  • しかし、RAID-3とは違い元データはブロック単位の保存になる
  • データの書き込みが発生すると、パリティ用ディスクへの書き込みが集中してしまい、それがボトルネックとなって書き込み性能が下がってしまう
    • このデメリットをパリティの分散書き込みで改善しているのがRAID-5であり、RAID-4は事実上RAID-5で代替されている
RAID-5
  • RAID-4と同様、ブロック単位の元データとパリティデータを保存する
  • しかし、RAID-4とは違いパリティを分散保存する
    • パリティ用ディスクへのアクセス集中が避けられるため、高速性・信頼性が高くなる
  • そもそも元データ用とパリティ用でディスクが分けられておらず、パリティは全ディスクに分散して書き込まれる
  • どれか1台のディスクが故障しても、それ以外のディスクのデータとパリティ情報から、元の完全なデータを生成して回復できる
    • ただし、回復可能なのは1台のディスクが故障したときまでであり、同時に2台以上が壊れると回復は不可能になる
  • パリティの保存に必要なのは、全ディスク台数に関係なくディスク1台分の容量なので、ディスク台数が多いほど容量の利用効率も向上する
RAID-6
  • 異なるパリティを同時に記録することで、同時に2台故障しても復旧できる
  • 4台以上の構成が必要で、パリティデータに常に2台分の容量が必要になる
ストライピング単位 データ復元方法 冗長ディスク構成
RAID-2 ビット ECC 固定
RAID-3 ビット パリティ 固定
RAID-4 ブロック パリティ 固定
RAID-5 ブロック パリティ 分散

信頼性設計の概念

  • フェールセーフ
    • 誤作動による影響を最小限にとどめるように制御する考え方や方策
  • フェールソフト
    • 障害が発生した時、性能の低下はやむを得ないとしても、システム全体を停止させず、機能を維持させようとする考え方や方策
  • フールプルーフ
    • 意図しない使われ方をしても誤作動をしないように設計すること