Logic Delight

明日のワシは忘れてしまうから、コードにはコメントを書くのです。

情報セキュリティの体系化

偉い人からのデッカイボールに対応するためのメモメモ。。

情報セキュリティの目的

  1. 機密性(Confidentiality)
    • アクセス権を持つ者だけが、情報にアクセスできることを確実にすること
      • アクセス制御、パスワード認証、暗号化、入退室管理
  2. 完全性(Integrity)
    • 情報及び処理方法が正確であることおよび完全であることを保護すること
      • デジタル署名、メッセージダイジェストによる改竄防止
  3. 可用性(Availability)
    • 認可された利用者が、必要なときに、情報および関連する資産にアクセスできることを確実にすること
  4. 責任追跡生 / 説明可能性(Accountability)
    • システムが、いつ、誰に利用されたかを追跡できること
  5. 真正性 / 認証性(Authenticity)
    • 情報の作成者や送信者が(なりすまし/偽物ではなく)本物であることを保証すること
      • デジタル署名、パスワード認証
  6. 信頼性(Reliability)
    • システムやプロセスが矛盾なく動作すること、一貫して動作すること
      • ネットワークやシステムの2重化による呼称対策、サーバ室での温度管理、負荷監視

前半の3つを「セキュリティのCIA」と呼ぶ。最近は、後半の3つを追加して6大要素とすることもある。

セキュリティの機能

  1. 抑制
    • セキュリティの存在が、犯罪・事故などを牽制・抑止する
      • ホスティング、外部委託、不要なサービスの停止、監視カメラ、規則・契約書への明記
  2. 予防
    • 脅威の顕在化、拡大を防止する
  3. 検知
    • 事故・障害・不正などを速やかに発見・通知する
      • ログの監視、侵入検知システム、SNMPによるネットワーク管理
  4. 回復
    • 事故・障害から正常な状態に回復する
      • バックアップ、代替機の確保、復旧対応マニュアルの作成

セキュリティの対策

  1. 物理的対策
    • 建物・設備基準
  2. 技術的対策
  3. 運用管理対策

情報セキュリティの指す範囲

  • 情報セキュリティ
    • コンピュータ・セキュリティ
      • ネットワーク・セキュリティ
    • (建物・設備などの)物理セキュリティ

情報セキュリティの技術的対策

  1. 監査(Audit)
    • 他の5階層全体を指し、導入した製品自身に設定ミスがないか、利用者がルールどおりに使用しているかなどを監視し、監査証跡を記録する製品およびサービス
  2. 暗号化(Encryption)
    • IPsec技術を使ったVPN、ファイル暗号化など、機密漏洩対策としての製品およびサービス
  3. 特権定義(Priviledge Definition / Single Sign On)
    • 個人の属性に対して定義されたシステムへのアクセス権限を管理運営する認可の製品およびサービス
  4. 認証(Authentication)
    • ネットワークやサーバにアクセスする際の、本人性を確認する製品およびサービス
  5. 通信規制(Access Control)
  6. データ保護(Data Protection / Data Integrity)
    • アンチウィルスに関する製品およびサービス

時系列で見た考え方

  • 事前対策
    • ファイアウォール、ウィルス対策サーバ、安全なWebアプリ開発、ハードディスク暗号化、サーバ室での安定稼働、パッチ適用
  • 発生時の対策
    • ネットワークからの切り離し、社内への周知、ホームページ上での公表、政府機関への連絡、HDDやメモリ内の証拠保全作業
  • 発生後の対応、見直し
    • 発生したインシデントのレビュー、ポリシーの改定や新たな対応策の導入
  • 日常の運用
    • 社員の教育、ログの監視、定期的バックアップ、脆弱性情報の収集、アカウント登録削除の管理徹底

脅威の分類

  • 人為的かつ意図的な脅威
    • 直接的な脅威
      • 破壊
      • 漏洩
      • 改竄
      • 盗聴
      • 盗難
      • サービス停止
      • 不正利用
      • 踏み台
      • ウィルス感染
    • 取引に関わる脅威
      • なりすまし
      • 否認
  • 人為的かつ非意図的な脅威
    • オペミス、間違い・勘違い
  • 人為的かつ非意図的な脅威
    • H/W故障や自然災害

情報セキュリティのInputまとめ

この数年、情報セキュリティって何やった?を自分向けメモにまとめて振り返ってみる。

Dockerを使ったMongoDBの導入

前回に引き続きローカル開発環境で軽くMongoDBを導入して試したい、という場合にVagrant上でMongoDBをインストールしてゴニョゴニョってやってたけど、Dockerではデフォルトのインストールイメージが公開されているので導入がメチャ楽だ、というシリーズですウス。

MongoDB のDockerイメージ

MongoDB - Docker Hub https://hub.docker.com/_/mongo/

Dockerfileはこれ github.com

以下、公式ガイドのまんまですが解説。

MongoDB on Dockerコンテナーの起動

$ docker run --name my-mongo -d mongo

my-mongo という名称でバックグラウンドでDockerサーバが起動し、27017ポートでリッスン状態になる。

MongoDB shellで接続してみる

$ docker run -it --link my-mongo:mongo --rm mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'
MongoDB shell version: 3.2.0
connecting to: 172.17.0.2:27017/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
(中略)
> show dbs
local  0.000GB
> use mydb
switched to db mydb
> db.createCollection('users');
{ "ok" : 1 }

ちゃんと使えていますね。終わるときは、Ctrl-Cで抜けます。

MongoDB on Dockerコンテナーの停止

$ docker stop my-mongo

以上!前回同様に便利だから、今後は意識した作業としての「ミドルウェアをインストールする」ということが少なくなっていくかもしれませんな。

Dockerを使ったRedisの導入

ローカル開発環境で軽くRedisを導入して試したい、という場合にVagrant上でRedisをインストールしてゴニョゴニョってやってたけど、Dockerではデフォルトのインストールイメージが公開されているので導入がメチャ楽だ、という話ですウス。

Redis のDockerイメージ

Redis - Docker Hub
https://hub.docker.com/_/redis/

Dockerfileはこれ github.com

以下、上記サイトのガイドのまんまですが解説。

Redis on Dockerコンテナーの起動

$ docker run --name my-redis -d redis

my-redis という名称でバックグラウンドでDockerサーバが起動し、6379ポートでリッスン状態になる。

redis-cli で接続してみる

$ docker run -it --link my-redis:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'
172.17.0.2:6379[1]> set key1 11111
OK
172.17.0.2:6379[1]> get key1
"11111"

ちゃんと使えていますね。終わるときは、Ctrl-Cで抜けます。

Redis on Dockerコンテナーの停止

$ docker stop my-redis

以上!チョー簡単で便利な世の中になったもんですな。

よりコンパクトで軽量なコンテナー仮想化環境へシフト中

VagrantもDockerも軽くかじっていたのですが、DockerはLinux上でしか動作してくれなかったのでVagrantLinux上でDockerとかダルいなーと思ってVagrantをメインに使っていたワシですウス。

ですが、気がついたらDockerがMacWindows上でも動いてくれる環境が整っていたようなので、チマチマとVagrantで構築していた仮想環境をDockerコンテナーに移行中。。。

Vagrantボックスの掃除に使っているコマンド

カレントディレクトリ配下のVagrantfileから、ボックス名をgrepする

$ find . -name Vagrantfile | xargs grep "config.vm.box "

./centosMongoDB/Vagrantfile:  config.vm.box = "CentOS-6.4"
./ubuntuGrunt/Vagrantfile:  config.vm.box = "hashicorp/precise32"
./ubuntuRedis/Vagrantfile:  config.vm.box = "ubuntu/trusty64"

Vagrant ボックス名を一覧して、ボックスを削除する

$ vagrant box list

hashicorp/precise32 (virtualbox, 1.0.0)
precise32           (virtualbox, 0)
ubuntu/trusty64     (virtualbox, 20150609.0.10)

$ vagrant box remove [boxname]

これからは軽量なコンテナーで仮想化だ

素敵だDocker☆

Get Started with Docker (for Mac)
https://docs.docker.com/mac/

Mac環境の Java8 を update66 にバージョンアップ

以前導入した JDK8u20 から JDK8u66 にバージョンアップしたのでメモメモ。

現状のJavaバージョンの確認(キホン)

$ java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

インストールされている全てのjavaの確認

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

新しいJDKをインストール

Java SE - Downloads | Oracle Technology Network | Oracle

からDownloadしたdmg→pkg→インストールOK

バージョンアップ確認

$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

インストールされている全てのjavaの確認(再)

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    1.8.0_66, x86_64:   "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home
    1.8.0_20, x86_64:   "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home

1.8.0_20はもう不要になったのでアンインストールしたい。

旧バージョンJDKのアンインストール

$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk

参考にしたサイト

Mac(OS X)におけるJava8(jdk8)等のインストール、アップデート、アンインストール方法
http://javaworld.helpfulness.jp/post-50/

国内gitホスティングサービスの codebreak; おつ

国内gitホスティングサービスの codebreak; が2016年1月末でサービス終了だそうな。これで無料プライベートリポジトリはBitBucketだけだな、と思って諸々のリポジトリを引っ越そうかと思ったらBitBucket落ちてる。おぃ大丈夫か、その可用性は。。。

サービス終了のお知らせ - codebreak;
https://codebreak.com/ja/contents/closure/#inform_closure

BitBucket - (500 Internal Server Error)
https://bitbucket.org/