Linux系のパッケージのバージョン番号が古くても、セキュリティフィックスは入っている場合があるというお話

概要

Linux系のパッケージのバージョン番号が古くても、セキュリティフィックスは入っている場合がある

例えば

Debianのbuster(バージョン10)に入っている apache2 は 2.4.38

本家の apache2 は 2.4.43 で、リリースノートを見ると、色々なセキュリティフィックスが入っている

debianのbusterのapache2は 2.4.38 だから、脆弱性が残っているの?

実はそんなことはなくて、2.4.38 にセキュリティフィックスを入れている

なんでそんなことしてるの?

Debianは安定性を重視しているため

勝手にパッケージのバージョンを上げて互換性を損なわないようにしている

そのため、互換性を維持しながら、現状のバージョンのセキュリティフィックスを入れている(これをバックポートと言う)

参考: 質問: なぜ旧バージョンのパッケージを変更しているのですか?

セキュリティフィックスが入ったかどうかは、どこで確認したら良いの?

security-tracker というBTSのようなもので管理されている

以下のように、https://security-tracker.debian.org/tracker/${CVE-番号} で状況が確認できる

自分の環境のパッケージにセキュリティフィックスが入っているかはどう確認するの?

例えば、上記の CVE-2019-0217 は、 バージョン 2.4.38-3+deb10u3 で修正されたと出ている

deb10u3 は、Debianのbuster(バージョン10)での 3 回目のupdateという意味

dpkg -l コマンドで、パッケージの詳細なバージョンが確認できるので、そこで +deb10u${x} のxが3以上ならば、 CVE-2019-0217 のセキュリティフィックスは適用済と分かる

# dpkg -l apache2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version          Architecture Description
+++-==============-================-============-=================================
ii  apache2        2.4.38-3+deb10u3 amd64        Apache HTTP Server

自分の環境のバージョンが古い場合どうしたら良いの?

以下のコマンドでパッケージを更新すればOK

apt-get update && apt-get install ${パッケージ名}

参考

Debianで実際にバックポートをしている方の記録

security.sios.com

RHELも同様の仕組みを採用している

access.redhat.com

Nginxのライフサイクルポリシーおぼえがき

はじめに

こんなもの見ないで原点にあたるのが良いです

www.nginx.com

Nginxのバージョニング

  • stable : 安定版 と mainline : 主流版がある
  • 偶数バージョンが stable
  • 奇数バージョンが mainline
  • 毎年4月に、mainline の最新版から分岐する
  • 2020/06 現在は、 stable が 1.18、mainline が 1.19

stable と mainline の違い

  • mainline はupdateやbugfix がドンドン入る
  • stable は重大な修正のみ

本番で使うべきは stable と mainline どっち?

stable 一択

信頼性は高いですが、いくつかの実験的なモジュールが含まれている可能性があり、いくつかの新しいバグがある可能性もあります

docs.nginx.com

旧バージョンの安定版はサポートされないの?

最新の stablemainline 以外は、deprecated だそうです

1.12, 13 Release時の記事

以前の安定版ブランチである 1.10 は非推奨となっており、今後はアップデートやサポートを行う予定はありません

www.nginx.com

serverless のバージョンが古いまま、lambda ruby 2.7 を使うと The security token included in the request is invalid エラーが出てハマるので最新版にしよう

というお話です

出てくるエラー

ruby 2.7 で serverless invoke を実行すると --aws-profile を設定していても The security token included in the request is invalid が出ます

Error raised from handler method
{ 
  "errorMessage": "The security token included in the request is invalid.",
  "errorType": "Function<Aws::SSM::Errors::UnrecognizedClientException>",
  "stackTrace": [
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:20:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/idempotency_token.rb:17:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/param_converter.rb:24:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/seahorse/client/plugins/response_target.rb:23:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/seahorse/client/request.rb:70:in `send_request'",
    "/var/runtime/gems/aws-sdk-ssm-1.76.0/lib/aws-sdk-ssm/client.rb:7859:in `send_command'",
    "/var/task/handler.rb:6:in `hoge'"
  ]
}

原因

serverlessのバグです

github.com

対応方法

最新版の serverless をインストールしましょう

macでMS公認の無料window10使用版を使う方法と、初期設定のメモ

事前準備

仮想マシンクライアントのVirtualBoxをダウンロードする

www.virtualbox.org

  • 無料です

MS公式の動作確認用のwindows仮想マシンイメージをダウンロードする

https://developer.microsoft.com/en-us/microsoft-edge/tools%E3%81%A1/vms/

  • 無料です
  • 使用期限は90日
  • ログインパスワードは Passw0rd!

VirtualBoxのGuest Additionsをインストール

仮想マシンと本体とのやりとりを便利にする、色々な機能をインストールする

  • 仮想マシンの電源をOFFにする
  • VirtualBoxの Machine -> Settings... -> Storage で新しくDVDデバイスを追加
  • 仮想マシンを起動した後、devices -> Insert Guest Additions CD を選択
  • 表示される手順に沿ってインストール & 再起動

日本語化 & macのキーボードを使えるようにする

こちらの (5) を参照

qiita.com

共有ディレクトリ

  • VirtualBoxの Machine -> Settings... -> Shard folder から追加
  • ゲストマシン側からは、ネットワークドライブとして見えるようになる

画面サイズをvirtualboxのウインドウサイズに追従させる

View -> Auto Resize Guest Display を選択

ソフトウェアアップデートで勝手に再起動しないようにする

  • 仮想マシン内のwindowsの設定から、「更新とセキュリティ」を選択
  • 「アクティブ時間の変更」から、作業時間を選択すると、その時間以外に再起動するようになる

スナップショットを取る

ここまでやったらスナップショットを取って、90日経ったらこのスナップショットからまた起動するようにしておけば楽

ruby3.0で「hashをキーワード引数に自動変換する機能」の削除がリスケされた流れを自分なりに理解する記事

なにこれ

ruby3.0で「hashをキーワード引数に自動変換する機能」を削除する予定だったけど、延期もしくは中止する

と、Matzがrailsのフォーラムでコメントしていたので、その経緯とかを把握するために記事にしました

discuss.rubyonrails.org

そもそも、hashをキーワード引数に自動変換する機能って?

def a(hoge:)
  p hoge
end

a(hoge: 'a')
a({hoge: 'b'})

こんな感じに、メソッドがキーワード引数の場合、hashを引数に渡しても良い感じに解釈してくれる機能

なんで自動変換機能が削除されるの?

この機能のために、バグが発生したり、機能の追加が面倒という欠点があったので、2017年頃には、ruby 3.0.0 からは削除されるという話が出ていた

また、その前準備の期間として、ruby 2.7では、非推奨の機能とされ、Warningが出るように変更された

上のコードをruby2.7.1で実行すると警告が出る

01.rb:6: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
01.rb:1: warning: The called method `a' is defined here

techracho.bpsinc.jp

なんで自動変換機能が削除が延期されたの?

Railsフォーラムで、上記の警告が大量に出過ぎて鬱陶しい & 対応がすごい大変という話が上がった(らしい)

それに対して、Matzが以下のようにフォーラムにコメントした

  • 多すぎるWarningがノイズになっているのを認識している。2.7.2ではWarningを消すか減らす
  • 移行コストを低く見積もりすぎていた
  • 上記のために、ruby3.0でキーワード引数をどうするか(延期/中止)検討する

👇リスケに関しての記事

techracho.bpsinc.jp

今後どうするの?

Ruby側は、以下のissueで議論するらしい

bugs.ruby-lang.org

感想

  • Rails使っていて、rubyのアップデート考えている人は、Ruby側の結論と、それに対してのRails側の反応を見てから、どうするか決めたほうが良いんじゃないですかね
  • ruby2.7系については、APIレベルでの非互換性がある変更は無いはずなので、特に慌てることは無いのでは

AWS WAF Regionalの情報を取りたい場合、使うのは Aws::WAFRegional::Client だよ! というお話

これで2H程度ハマってしまった...

言いたいこと

  • AWS WAFには、グローバル(CDN用)と、Region単位の Regional がある
  • ruby SDKでWAFの情報を取りたい場合、グローバルとRegionalでは使用するclientが異なる
    • グローバルならば、 Aws::WAF::Client
    • Regional ならば、 Aws::WAF::WAFRegional

Aws::WAF::Client もドキュメントでは、引数に region を指定できるので、ここを指定すれば、Regional の情報が取れると勘違いしていた...