オープンソース

grep -Fifはなぜ遅くなったか

はじめに GNU grepのメーリング・リストを見ていると、以下のようなコマンドが遅くなったという投稿が多数なされています。実際、マルチバイト・ロケールに設定した環境で、/usr/share/dict/linux.wordsのような大きなパターン文字列を指定してgrep -Fif pat…

まもなくgrep 2.23リリース

GNU grep 2.23が近日中にリリースされる見込みとなりました。GNU grep 2.23は、GNU grep 2.22に続いてバグフィックスリリースです。GNU grep 2.23では、入力データがテキストかバイナリかを判定するロジックが強化されています。GNU grep 2.21で同様の強化が…

正規表現の実装の難しさ

正規表現はPOSIXで定義されています。しかし、POSIXで定義されている正規表現はPOSIXロケール(LANG=C)しか考慮していないため、POSIX以外のロケールをサポートしようとすると様々な問題に遭遇します。それらについて見ていくことにしたいと思います。 不適切…

grepツール「highway」を試してみました

最近「highway」というgrepツールが公開されていたので試してみました。 highwayのビルド まずはソースコードをダウンロード。右下の方にある「Download ZIP」をクリックすることで、ソースコード一式をzip形式でダウンロードできます。展開してhighway-mast…

まもなくgrep 2.22リリース

GNU grep 2.22が近日中にリリースされる見込みとなりました。GNU grep 2.22は、結果不正バグが見つかったことによるバグフィックスリリースです。そのため、目立った改善点はありませんが、それらを見ていくとともに、今後の見通しについて紹介します。 GNU …

OpenSSLでオレオレ認証局を作ろう

フリーなSSLの実装であるOpenSSLがこの世に登場してから15年以上の月日が経過しています。したがって、OpenSSLを使用したオレオレ認証局の構築手順を紹介しているサイトは多数あります。しかし、各操作の意味まで説明しているサイトは、残念ながらほとんど見…

GHOST (CVE-2015-0235) について

1/27にglibcのgethostbynameでバッファオーバーフローのを脆弱性 (CVE-2015-0235) が発表されました。この脆弱性は、通称 GHOST と呼ばれています。http://www.openwall.com/lists/oss-security/2015/01/27/9 CVE-2015-0235の原因 脆弱性が見つかったのは、n…

grepの-lオプションと-Lオプション

grepの-lオプションと-Lオプション。マニュアルを見ると、それぞれ以下のように説明されている。 -l, --files-with-matches 通常の出力はしません。その代わりに、grepを普通に実行した際に、何らかの検索結果を表示する ような入力ファイルの名前を列挙しま…

grabやagは本当にgrepよりも速い?

grepよりも高速なgrepの実装「grab」、grabよりも高速な「ag」。すなわち、grep grepからgrabやagに移行する人がいるらしい。ag (The Silver Searcher) の作者は、自らベンチマークを行いagがgrabよりも30倍高速であることを示したそうです。そこで、agやgra…

基本正規表現 (BRE) と拡張正規表現 (ERE)

POSIX正規表現には、grepコマンドやsedコマンドで使用できる基本正規表現(BRE)と、egrepコマンドやawkコマンドで使用できる拡張正規表現(ERE)があります。一般的にはどういうわけかより多くの特殊文字を持つ正規表現が好まれているようで、BREよりもERE、ERE…

まもなく GNU grep 2.21 リリース

GNU grep 2.21のリリースが秒読み段階に入りました。GNU grep 2.21 では、特筆すべきものはないものの、いくつかの点で機能やパフォーマンスが改善されています。それでは、主な改善点を見ていくことにしましょう。 スパースファイルに対する改善 スパースフ…

GNU sedのパフォーマンス

GNU grepとGNU awk (Gawk) のパフォーマンス向上についてお話したので、今度はGNU sedを見てみましょう。 GNU sed 4.2.1 Red Hat Enterprise Linux 6にバンドルされているGNU sed 4.2.1でテストしてみました。 $ yes jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj…

Gawk (GNU awk) のパフォーマンス

以前にGNU grepのパフォーマンス向上についてお話しましたが、実はGawkのマッチング部分にはGNU grepと同じコードが使われています。ということは、Gawkのパフォーマンスも向上しているのでしょうか? Gawk 3.1.7 まずは、Red Hat Enterprise Linux 6にバン…

bashの脆弱性 (ShellShock) まとめ

これまでに見つかり修正されているbashの脆弱性 (ShellShock) について、該当有無の判断方法と、修正バージョンをまとめました。 CVE-2014-6271 確認方法 $ env x='() { :;}; echo vulnerable' ./bash -c "echo this is a test" [NG pattern] vulnerable thi…

bashの脆弱性CVE-2014-7186, CVE-2014-7187について

CVE-2014-6271やCVE-2014-7169と比べると影響は小さいですが、本家のGNUからは2014/09/30時点においてもパッチはリリースされていません。CVE-2014-6271の対処を済ませていれば発生条件を満たすスクリプトを書かない限り再現せず、その発生条件は通常の使用…

bash - 環境変数から関数を取得する機能のセキュリティ強化

CVE-2014-6271やCVE-2014-7169では、任意の環境変数定義で起こりうることが問題の1つでした。そこで、bashの起動時に設定された環境変数が関数なのか変数なのかを判断するロジックについて修正が行われました。※このパッチはCVE-2014-6277とCVE-2014-6278を…

bashに深刻な脆弱性 (CVE-2014-6271, CVE-2014-7169)

bashにコード・インジェクション攻撃を許す深刻な脆弱性が見つかりました。(CVE-2014-6271, CVE-2014-7169)bashを起動する際に、環境変数に特殊な文字列を設定することで、任意の処理を起動することが可能になります。既に修正パッチの配布が開始されていて…

OpenSSL、今度はChange Cipher Specメッセージ処理に脆弱性

2014年4月に致命的ともいうべき HeartBleed 脆弱性 (CVE-2014-0160) が発見され大騒ぎを引き起こした OpenSSL。それからたった 2 ヶ月しか経過していないにもかかわらず、新たな脆弱性 (CVE-2014-0224) が発見されました。発見したのは株式会社レピダムの菊…

GNU grep 2.20 リリース

6/3にGNU grep 2.20がリリースされました。GNU grep 2.20 は、GNU grep 2.19 で行われた多くのパフォーマンス改善に対するメンテナンス・リリースです。結果不正の不具合が見つかったため、GNU grep 2.19のリリースから、たった11日後にリリースされる運びと…

GNU grep 2.19 リリース

5/23にGNU grep 2.19 がリリースされました。GNU grep 2.19 の最大の目玉はパフォーマンスの改善です。今回のリリースはメディアには取り上げられませんでしたが、メディアに取り上げられたGNU grep 2.17 よりも、はるかに多くのパフォーマンスの改善がなさ…