サーバ本体、データベース、スキーマ、テーブル、ユーザ の関係に戸惑います。
現時点では、次のように理解しています。
「インシデント発生時の初動調査の手引き 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のコマンドラインまで記載されているので、助かります。
外部委託する際の 要求のまとめ方について、ググってみた
以下は、いずれも、「記載されていて当然」的な内容ですが、 漏れがちな内容でもありますので、自分用にメモ。
IPAが公開する 要求/要件仕様等、全般のサンプル(テンプレート)
1) https://www.ipa.go.jp/osc/trm/index.html
└ 2) https://www.ipa.go.jp/osc/trm/trmtemplate.html
図や表でなく、多くを文章で記載されていますが、さすがの情報量、というか網羅性。
上記 2)にある資料には、機能要求や非機能要求だけでなく、 納品物の定義やプロジェクト推進方法まで記載されています。
まぁ、ここまで細かく指定してくれるシステム発注者は、いないんですけどね。
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)」と重複している 部分も多くありますので、参考程度。
システム運用に関しては、以前、以下のエントリを記載しています。
ITILにおけるインシデント管理と、問題管理 - end0tknr's kipple - 新web写経開発
システム運用管理の勘どころ - end0tknr's kipple - 新web写経開発
JPCERT CC が公開する インシデント ハンドリング マニュアル (以下)は、 ITILのフローと異なりますが、JPCERT CC が出してるものですので、参考になります
https://www.jpcert.or.jp/csirt_material/files/manual_ver1.0_20151126.pdf
以前も 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 (≒ curses) がinstall された centos7 環境に mysql をinstallしていたらしい。
そこで今回は、readline と ncurses を install
$ 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
https://www.gnu.org/software/ncurses/
https://invisible-island.net/ncurses/ncurses.html
$ sudo yum install ncurses-devel
$ 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 :: 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/
先程の 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では、 他にも様々、設定していましたが、上記だけの編集でも動作はするようです。
$ cd /usr/local/mysql $ sudo bin/mysqld_safe --user=mysql
上のようにmysqlのdaemonを起動し、 下のように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完了後は、mysqlのdaemonを停止してOKです。
ただし、停止方法が分からなかった為、kill しています。
自動起動の設定自体は、mysql.server を /etc/init.d 以下にcopyするだけです。 設定後、centosを再起動して、mysqlのdaemonが動作していることを確認しましょう。
$ sudo su - # cd /etc/init.d # cp /usr/local/mysql/support-files/mysql.server ./mysql.server # systemctl enable mysql.server # reboot
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を作成しよう
「gpedit.msc」を「ファイル名を指定して実行」し、後は下図の通り
「バーバラ・ミントさんの名前は聞いたことがあるかなぁ...」程度でしたが、 とあるきっかけで「考える技術・書く技術」の「書く技術」を中心に読んでみた。
以下、自分用メモ
https://www.amazon.co.jp/dp/4478490279www.amazon.co.jp
https://www.amazon.co.jp/dp/4478490279
上記のように図示できますが、単純には以下のように理解してよい気がします。
アプローチ | 説明 |
---|---|
トップダウン | なぜなぜ分析 |
ボトムアップ | KJ法 |
「人が短期記憶できる情報はかなり少ない」為、 「各グループ内のメッセージは削減する or 集約すべき」らしい
伝えようとするテーマについて読み手が既に知っていると思われることを要約し、 これから文書中で答えなければならない疑問を明らかにする。
導入部は省略しない。状況や過去の出来事は導入部を利用する。
「導入部のストーリー展開」とは「状況(Situation)」→「複雑化(Complication)」 →「疑問(Question)」。
状況 (主題に関し 確認されている事実) |
複雑化 (次に起こった 疑問へつながる事実) |
疑問 |
---|---|---|
しなければならない仕事がある | その仕事の妨げに なることが起きた |
どうすればよいか |
問題がある | 解決方法を知っている | 解決方法を実行するには どうすればよいか |
問題がある | 解決方法が提案された | それは正しい解決方法か |
行動をとった | その行動は効果がなかった | なぜ効果がなかったか |
超大量のサーバがあり && EOLなミドルウエア管理ができていない場合、 「独自virus定義を作成し、virus scanに検知だけさせれば」と思ったのがきっかけ
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
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) #
clamavには、3種類の定義fileの書式があるようです。 以下に記載していますが、いずれも clamav付属の sigtool を利用できます。
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
$ /usr/local/bin/sigtool --md5 /usr/local/openssl_1_0_1/bin/openssl \ > /home/endo/tmp/CLAM_DATA/test.hdb
$ /usr/local/bin/sigtool --mdb /usr/local/openssl_1_0_1/bin/openssl \ > /home/endo/tmp/CLAM_DATA/test.mdb
以下の通りです。infected オプションにより検知のみ(削除等を行わない)にしています
$ /usr/local/bin/clamscan --verbose --infected \ --database=/home/endo/tmp/CLAM_DATA \ -r /home/endo/tmp/CLAM_TEST
誤送信防止プラグインである Secure Addressing の送信前確認画面において 宛先に応じた顔写真を表示。 顔写真は、WEB上(イントラ内)にあり、httpsにてアクセス可能。
https://addons.mozilla.org/ja/thunderbird/addon/secure-addressing/
これを実現するには、Thunderbirdのaddonにおいて、以下の技術要素が必要
imageタグ内のsrc属性は「https://~.png」のように拡張子で終わる場合、問題ないが、 拡張子で終わらない場合、画像が表示されない為。
(XULの問題かと思いましたが、Thunderbirdのアドレス帳の「顔写真」タブで、 拡張子なしのURLを指定した場合も表示されなかったので)
また、Thunderbird環境で画像ファイルをダウンロード & 保存する方法も 分かりませんでしたので
今回、初めて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
以下の内容で、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>
例えば、次の通り。(byte単位です)
# /usr/bin/rsync -e ssh -auolr --bwlimit=2048 /data/attach_file testadm@10.82.???.???:/data
ERROR: invalid byte sequence for encoding "SJIS": ...
きっかけは上記のようなエラー。 機種依存文字が影響していることは、すぐに分かりましたが、client側での対処に手こずった。
随分、久しぶりにpostgresを触ったせいですね。
参考url
https://www.postgresql.jp/document/9.6/html/multibyte.html
今回の為、test DBをencoding=utf8で createdb しています。 ちなみにサーバ側のencodingに、sjisやcp932はないようです。
$ /usr/local/pgsql/bin/psql --version psql (PostgreSQL) 9.6.5 $ /usr/local/pgsql/bin/psql --username=postgres -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
$ /usr/local/pgsql/bin/psql --username=postgres test $ test=# CREATE TABLE test ( atri_id serial, /* = AUTO_INCREMENT of mysql */ atri_val varchar(20), PRIMARY KEY (atri_id) ); test=# \d List of relations Schema | Name | Type | Owner --------+------------------+----------+---------- public | test | table | postgres public | test_atri_id_seq | sequence | postgres (2 rows) test=# \d test Table "public.test" Column | Type | Modifiers ----------+-----------------------+-------------------------------------------------------- atri_id | integer | not null default nextval('test_atri_id_seq'::regclass) atri_val | character varying(20) | Indexes: "test_pkey" PRIMARY KEY, btree (atri_id)
https://www.postgresql.jp/document/9.6/html/multibyte.html
上記のpostgresのdocumentにおいて、client側encodingの指定として 1)「SET CLIENT_ENCODING TO '~'」2)「SET NAMES '~'」3)「$ENV{PGCLIENTENCODING}」 があるように記載されていますが、 私の環境において1),2)は上手く動作せず、3)の$ENV{PGCLIENTENCODING}に落ち着きました。
#!/usr/local/bin/perl use utf8; use strict; use warnings; use DBI; use Encode; use Data::Dumper; my $DB_CONF = {db=>"DBI:Pg:dbname=test;host=localhost;", user=>'postgres', pass=>'', client_encoding => 'SJIS', option => {AutoCommit=>0, # pg_enable_utf8=>0, RaiseError => 1, PrintError => 0} }; main(); sub main { $ENV{PGCLIENTENCODING} = $DB_CONF->{client_encoding}; my $dbh = connect_db(); my $sql =<<EOF; insert into test (atri_val) values(?) EOF my $sth = $dbh->prepare($sql); my $org_val = '髙'; # my $new_val = Encode::encode('utf8',$org_val); my $new_val = Encode::encode('cp932',$org_val); unless( $sth->execute($new_val) ){ print STDERR $sth->errstr,"\n"; } $dbh->commit; $dbh->disconnect; } sub connect_db { my $dbh = DBI->connect($DB_CONF->{db}, $DB_CONF->{user}, $DB_CONF->{pass}, $DB_CONF->{option}); # $dbh->do("SET NAMES '$DB_CONF->{client_encoding}'") or # die "cannot set encoding $!"; # $dbh->do("SET CLIENT_ENCODING TO $DB_CONF->{client_encoding}") or # die "cannot set encoding $!"; return $dbh; }