end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

Re: HashiCorp Vaultの基礎知識と導入

Vault by HashiCorp

HashiCorp Vaultの基礎知識と導入 | Developers.IO

  • 1) 機密情報/秘密情報を管理するためのソフトウェア
  • 2) バックエンドには、MySQLAWS S3?を利用可能
  • 3) 2015年に初回リリース

らしい。

Vaultがフロントに立ち、暗号化/複合化 を担ってくれるらしい。

1) だけ聞くと、導入したくなりますが、 2) のような中身であれば、自前実装でもよい気がします。

3)のように初回リリースから、それ程、経過していないこともあるので、 もう少し様子見

IPA J-CRAT(サイバーレスキュー隊)による インシデント発生時の初動調査の手引き for Win

「インシデント発生時の初動調査の手引き WindowsOS標準ツールで感染を見つける」

https://www.ipa.go.jp/security/J-CRAT/report/20180329.html

https://www.ipa.go.jp/files/000065284.pdf

外部からの攻撃が、サーバを超え、更に内部のPCにまで達すると、 攻撃の痕跡調査は(少なくとも私には)難しくなりますが、 J-CRATが公開する以下のpdfは、windowsコマンドラインまで記載されているので、助かります。

Re: 組織対応力ベンチマークチェックシート by OGC

【プレスリリース】「組織対応力ベンチマーク」発表に関して (2015年7月1日) - 一般社団法人 オープンガバメント・コンソーシアム

が提供されていて、内容を見ると、 「IPAでも公開してそうな資料」 & 「取っ掛かりとしての粒度としては、ちょうどいい」という印象。

OGC = オープンガバメント・コンソーシアム らしい。初めて聞いた団体名ですが、IPA との違いって何でしょ?

政府系システムの調達指針 - 機能要求や非機能要求(特にセキュリティ)

外部委託する際の 要求のまとめ方について、ググってみた

以下は、いずれも、「記載されていて当然」的な内容ですが、 漏れがちな内容でもありますので、自分用にメモ。

情報システム調達のための技術参照モデル(TRM)調達仕様書ひな形編

IPAが公開する 要求/要件仕様等、全般のサンプル(テンプレート)

1) https://www.ipa.go.jp/osc/trm/index.html

└ 2) https://www.ipa.go.jp/osc/trm/trmtemplate.html

図や表でなく、多くを文章で記載されていますが、さすがの情報量、というか網羅性。

上記 2)にある資料には、機能要求や非機能要求だけでなく、 納品物の定義やプロジェクト推進方法まで記載されています。

まぁ、ここまで細かく指定してくれるシステム発注者は、いないんですけどね。

政府機関等の情報セキュリティ対策のための統一基準群(平成28年度版)

http://www.nisc.go.jp/active/general/kijun28.html

内閣サイバーセキュリティセンターが公開する特にセキュリティ対策の資料。

こちらも、多くを文章で記載されていますが、さすがの網羅性。

情報システムに係る政府調達におけるセキュリティ要件策定マニュアル

http://www.nisc.go.jp/active/general/sbd_sakutei.html

こちらも、内閣サイバーセキュリティセンターによる公開資料。

特に * セキュリティ要件策定マニュアル 付録A.対策要件集 * には 具体的セキュリティリスクの内容と、それに対する仕様記載例、対策例 が、 表形式で記載されていて、読み休みです。

地方公共団体における情報セキュリティポリシーに関するガイドライン

http://www.soumu.go.jp/denshijiti/jyouhou_policy/index.html

こちらは「地方公共団体」向けで、 前述の「情報システム調達のための技術参照モデル(TRM)」と重複している 部分も多くありますので、参考程度。

JPCERT CC による インシデント ハンドリング マニュアル

システム運用に関しては、以前、以下のエントリを記載しています。

ITILにおけるインシデント管理と、問題管理 - end0tknr's kipple - 新web写経開発

システム運用管理の勘どころ - end0tknr's kipple - 新web写経開発

JPCERT CC が公開する インシデント ハンドリング マニュアル (以下)は、 ITILのフローと異なりますが、JPCERT CC が出してるものですので、参考になります

f:id:end0tknr:20180502055142p:plain

https://www.jpcert.or.jp/csirt_material/files/manual_ver1.0_20151126.pdf

CentOS 7.4 へ mysql 5.6.40 を src から install

以前も mysql 5.7 に関して同様のentryを記載していますが、 virtual boxで動作させている centos を ver.7.4 にした為、改めてinstall

先程のentryにも記載していますが、mysql 5.7.18 より、

my.cnf が提供されない為、mysql 5.6.40をinstallしています

mysql5.7 をsrcからinstall - end0tknr's kipple - 新web写経開発

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.9 ソースから MySQL をインストールする

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

前準備 - readline と ncurses の intall

以前は、とっくにreadlineやncurses (≒ curses) がinstall された centos7 環境に mysql をinstallしていたらしい。

そこで今回は、readline と ncurses を install

readline

$ ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz
$ tar -xvf readline-6.3.tar.gz
$ cd readline-6.3
$ configure
$ make
$ sudo make install

ncurses ≒ curses

https://www.gnu.org/software/ncurses/

https://invisible-island.net/ncurses/ncurses.html

$ sudo yum install ncurses-devel

mysql の build や install

$ tar -xvf mysql-5.6.40.tar.gz
$ cd mysql-5.6.40
$ cmake . \
   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
   -DDEFAULT_CHARSET=utf8 \
   -DDEFAULT_COLLATION=utf8_general_ci \
   -DENABLED_LOCAL_INFILE=true \
   -DWITH_INNOBASE_STORAGE_ENGINE=1 \
   -DWITH_EXTRA_CHARSETS=all \
   -DWITH_READLINE=ON \
$ make
$ make test
$ sudo make install

設定

ユーザやグループ追加

$ sudo groupadd mysql
$ sudo useradd -r -g mysql mysql

mysql_install_db 実行による data dirや my.cnfの作成

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.9.2 標準ソース配布を使用して MySQL をインストールする

dev.mysql.comのdocument のように単純?に scripts/mysql_install_db を実行すると data dir が /usr/local/mysql 以下に作成されます。

/usr/local/mysql 以下にデータがある構成は、好みではありませんので、「 --datadir=/var/mysql_data/ 」を追加しています。

( dev.mysql.comのdocument では、/usr/local/mysql 以下に data dir を作成する為、 余計な chown や chgrp の実行が必要です )

$ cd /usr/local/mysql
$ sudo /usr/local/bin/perl \
       scripts/mysql_install_db \
         --user=mysql  --datadir=/var/mysql_data/

edit /etc/my.cnf

先程の scripts/mysql_install_db により /usr/local/mysql/my.cnf が作成されますので、 /etc/my.cnf へ移動し、編集します。

$ sudo su -
# cd /etc
# mv /usr/local/mysql/my.cnf ./my.cnf
# vi ./my.cnf

以下、編集内容

old) # basedir = .....
new) basedir = /usr/local/mysql
old) # datadir = .....
new) datadir = /var/mysql_data

mysql 5.1頃から使用していたmy.cnfでは、 他にも様々、設定していましたが、上記だけの編集でも動作はするようです。

一旦、接続test

$ cd /usr/local/mysql
$ sudo bin/mysqld_safe --user=mysql

上のようにmysqldaemonを起動し、 下のようにmysqlのclientで接続できれば、OKです。

$ /usr/local/mysql/bin/mysql -u root
 :
Server version: 5.6.40 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
 :
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

接続test完了後は、mysqldaemonを停止してOKです。

ただし、停止方法が分からなかった為、kill しています。

自動起動

自動起動の設定自体は、mysql.server を /etc/init.d 以下にcopyするだけです。 設定後、centosを再起動して、mysqldaemonが動作していることを確認しましょう。

$ sudo su -
# cd /etc/init.d
# cp /usr/local/mysql/support-files/mysql.server ./mysql.server
# systemctl enable mysql.server

# reboot

mysql 5.7.18 より、default設定file ( my-default.cnf )が同包されない?

MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.18 (2017-04-10, General Availability)

上記のrelease noteに以下のように記載されています。

The my-default.cnf.sh file
(used to produce a default my-default.cnf or my-default.ini file)
is no longer included in source distributions and my-default.cnf
and my-default.ini are no longer included in or
installed by distribution packages. (Bug #22525354)

「my-default.cnf.sh だけの話で、my-default.cnf はあるのかも」と思い、 mysql 5.7.22 をsrcから installしましたが /etc/my.cnf や cd /usr/local/mysql/support-files/my-default.cnf がない。

全く最初からinstallする場合、my.cnf をどうやって準備しろと?

しばらくは、↓こちらを参考に my.cnfを作成しよう

mysql5.7 をsrcからinstall - end0tknr's kipple - 新web写経開発

バーバラ・ミント - 考える技術・書く技術 - 問題解決力を伸ばすピラミッド原則

「バーバラ・ミントさんの名前は聞いたことがあるかなぁ...」程度でしたが、 とあるきっかけで「考える技術・書く技術」の「書く技術」を中心に読んでみた。

以下、自分用メモ

https://www.amazon.co.jp/dp/4478490279www.amazon.co.jp

https://www.amazon.co.jp/dp/4478490279

ピラミッド原則のトップダウンアプローチと、ボトムアップアプローチ とは?

f:id:end0tknr:20180422042533p:plain

上記のように図示できますが、単純には以下のように理解してよい気がします。

アプローチ 説明
トップダウン なぜなぜ分析
ボトムアップ KJ法

マジックナンバー7 or マジックナンバー4 に気をつける

「人が短期記憶できる情報はかなり少ない」為、 「各グループ内のメッセージは削減する or 集約すべき」らしい

f:id:end0tknr:20180422042536p:plain

導入部のストーリー展開

伝えようとするテーマについて読み手が既に知っていると思われることを要約し、 これから文書中で答えなければならない疑問を明らかにする。

導入部は省略しない。状況や過去の出来事は導入部を利用する。

「導入部のストーリー展開」とは「状況(Situation)」→「複雑化(Complication)」 →「疑問(Question)」。

ほとんどの文書は4つの疑問のどれかに答える

状況
(主題に関し
確認されている事実)
複雑化
(次に起こった
疑問へつながる事実)
疑問
しなければならない仕事がある その仕事の妨げに
なることが起きた
どうすればよいか
問題がある 解決方法を知っている 解決方法を実行するには
どうすればよいか
問題がある 解決方法が提案された それは正しい解決方法か
行動をとった その行動は効果がなかった なぜ効果がなかったか

グループ化の順序を規定する

f:id:end0tknr:20180422042539p:plain

install clamav v.0.99.4 to centos 7 と、独自virus 定義の作成

超大量のサーバがあり && EOLなミドルウエア管理ができていない場合、 「独自virus定義を作成し、virus scanに検知だけさせれば」と思ったのがきっかけ

参考url

install

groupadd

$ su - 
# groupadd clamav
# useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav

download , configure , make ...

$ wget https://www.clamav.net/downloads/production/clamav-0.99.4.tar.gz
$ tar -xvf clamav-0.99.4.tar.gz
$ cd clamav-0.99.4
$ ./configure
  :
configure: Summary of detected features follows
              OS          : linux-gnu
              pthreads    : yes (-lpthread)
configure: Summary of miscellaneous features
              check       : no (auto)
              fanotify    : yes
              fdpassing   : 1
              IPv6        : yes
configure: Summary of optional tools
              clamdtop    : -lncurses (auto)
              milter      : yes (disabled)
              clamsubmit  : yes
configure: Summary of engine performance features
              release mode: yes
              llvm        : yes, from built-in (auto)
              mempool     : yes
configure: Summary of engine detection features
              bzip2       : ok
              zlib        : /usr
              unrar       : yes
              pcre        : /usr
              libxml2     : yes, from /usr
              yara        : yes
$
$ su
# make install

setting clamav( freshclam.conf )

install後、virus定義file(DB)を更新しようと、freshclam を実行したところ、 errorとなった為、freshclam.conf を作成。

freshclam.conf のファイルすらなかったので、サンプルよりcopy

# /usr/local/bin/freshclam
ERROR: Can't open/parse the config file /usr/local/etc/freshclam.conf

# cp ~/clamav-0.99.4/etc/freshclam.conf.sample /usr/local/etc/freshclam.conf

が、freshclam.conf 内に「Example」という記述があったので、コメント化

# /usr/local/bin/freshclam
ERROR: Please edit the example config file /usr/local/etc/freshclam.conf
ERROR: Can't open/parse the config file /usr/local/etc/freshclam.conf

# vi /usr/local/etc/freshclam.conf

が、virus定義file 用のdirがない為、mkdir

# /usr/local/bin/freshclam
ERROR: Can't change dir to /usr/local/share/clamav

# mkdir /usr/local/share/clamav

が、ユーザ(clamav)への書込み権限が必要らしく、chown

# /usr/local/bin/freshclam
ERROR: Can't create temporary directory /usr/local/share/clamav/clamav-3187640ea28ef290eedab5f5bfa9fc8c.tmp
Hint: The database directory must be writable for UID 1003 or GID 1003

# ls -l /usr/local/share
# chown clamav /usr/local/share/clamav

で、やっと成功。

# /usr/local/bin/freshclam 
ClamAV update process started at Sun Apr  8 10:47:58 2018
Downloading main.cvd [100%]
main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Downloading daily.cvd [100%]
daily.cvd updated (version: 24459, sigs: 1902655, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 319, sigs: 75, f-level: 63, builder: neo)
Database updated (6468979 signatures) from database.clamav.net (IP: 27.96.54.66)
#

独自virus 定義の作成 (.db , .hdb , *.mdb)

clamavには、3種類の定義fileの書式があるようです。 以下に記載していますが、いずれも clamav付属の sigtool を利用できます。

その1 - hexdump による *.db

hexdumpし、適当な範囲(40~400文字程度?)でcutし、これを*.dbに保存

$ cat /usr/local/openssl_1_0_1/bin/openssl | \
    /usr/local/bin/sigtool --hex-dump | \
    cut -c 1-100 >> /home/endo/tmp/CLAM_DATA/test.db 

その2 - md5チェックサムによる *.hdb

$ /usr/local/bin/sigtool --md5 /usr/local/openssl_1_0_1/bin/openssl \
   > /home/endo/tmp/CLAM_DATA/test.hdb

その3 - 実行ファイルのPEセクションを使用する *.mdb

$ /usr/local/bin/sigtool --mdb /usr/local/openssl_1_0_1/bin/openssl \
  > /home/endo/tmp/CLAM_DATA/test.mdb

独自virus 定義によるscan実行

以下の通りです。infected オプションにより検知のみ(削除等を行わない)にしています

$ /usr/local/bin/clamscan --verbose --infected \
    --database=/home/endo/tmp/CLAM_DATA \
    -r /home/endo/tmp/CLAM_TEST

Thunderbird ver.52 のaddon(plug-in)開発を中断

やりたかったことと、必要な技術要素

誤送信防止プラグインである Secure Addressing の送信前確認画面において 宛先に応じた顔写真を表示。 顔写真は、WEB上(イントラ内)にあり、httpsにてアクセス可能。

https://addons.mozilla.org/ja/thunderbird/addon/secure-addressing/

これを実現するには、Thunderbirdのaddonにおいて、以下の技術要素が必要

  • ldapまたはアドレス帳に対する メールアドレスからの会員ID(uid)の検索
  • XUL上での < image src="http://$画像URL" /> による画像表示

中断した理由

imageタグ内のsrc属性は「https://~.png」のように拡張子で終わる場合、問題ないが、 拡張子で終わらない場合、画像が表示されない為。

(XULの問題かと思いましたが、Thunderbirdのアドレス帳の「顔写真」タブで、 拡張子なしのURLを指定した場合も表示されなかったので)

また、Thunderbird環境で画像ファイルをダウンロード & 保存する方法も 分かりませんでしたので

参考url

今回、初めてThunderbirdのアドオン開発に触れてみましたが、以下のurlを読み、 更にダウンロードした実際のThunderbirdアドオンをunzipして読経するとよいと思います。

http://www.magicvox.net/archive/2014/03161644/ http://www.koikikukan.com/archives/2018/01/30-000300.php http://thinkami.hatenablog.com/entry/20140429/1398721329

http://remotehost.blog54.fc2.com/blog-entry-22.html?q=thunderbird&charset=utf-8 http://d.hatena.ne.jp/mallowlabs/20080807/1218106360 https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Thunderbird_extensions/Building_a_Thunderbird_extension

apache 2.4 の ssl設定 (conf/extra/httpd-ssl.conf)のオレオレ サンプル

以下の内容で、ssl化するはずですし、起動時のパスフレーズも聞かれないはず。

自分用メモ

Listen 443 https


#SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLPassPhraseDialog builtin


SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300


#SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512


SSLCryptoDevice builtin
#SSLCryptoDevice ubsec

<VirtualHost _default_:443>

#DocumentRoot "/var/www/html"
ServerName www.sexy-example.com:443

ErrorLog /data/sexyexample/logs/ssl_error_log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
TransferLog /data/sexyexample/logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/cert/sexyexample_crt.pem

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/cert/sexyexample_key.pem

#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
SSLCertificateChainFile /etc/httpd/cert/sexyexample.cer


BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog /var/log/sexyexample/httpd/logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>