Linux / Unix / Interix」カテゴリーアーカイブ

Windows と Linux の和暦対応

どうも、みむらです。
しばらく記事を書かない間に、新暦が発表され、
そして私も会社が変わってしまいました。
 
最近はアプリ診断員にジョブチェンジしました。
IDA さんが友達です。

特に最近は iOS アプリを見ているので、
フォレンジックネタとか iOS に関するセキュリティ診断ネタであれば、
凄く話に乗れると思います。

それ以外には、Unity のアプリとか (lib2cpp の読み解きとか)
Windows ならユーザランドからカーネルランドまで。お話まってます。


閑話休題。

新暦と言えば、やはり新暦対応でしょう。
私も新暦が発表された直後から「なんとしても対応しよう」と遊んでました。

画像
(from : https://twitter.com/mimura1133/status/1112566297135480838/ )

などなど。
 
今回は、もし「令和じゃない元号にします」と発表があった際に
素早く手持ちの環境を自己責任において対応させられるように
(要出典)
Windows と Linux の対応の仕組みを見ておこう
、とそういうテーマです。

 


Windows 側での対応

Windows の場合はレジストリキーを追加します。

(注:本修正を実施した事によりご利用中のプログラムに不具合が発生しても本サイトは責任を負いかねますと共に、くれぐれもプログラムの製造元へ連絡されませんようお願い致します)

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras 以下に
年号情報が詰まっていますので

REG_SZ 型にて
キー名:”<開始年> <開始月> <開始日>”
値:”<フル読み>_<代表する一文字>_<英語表記>_<英語短縮表記>”

のフォーマットにてキーを生成すれば OK のようです。

 

この値を設定すると、
この値を参照しているプログラムの処理系であれば
基本的に新年号に対応出来るようになります。

画像

 


Linux (glibc) での対応

Linux の場合は locale ファイルを修正します。

(注:本修正を実施した事によりご利用中のプログラムに不具合が発生しても本サイトは責任を負いかねますと共に、くれぐれもプログラムの製造元へ連絡されませんようお願い致します)
 

locales ファイルは下記のパスに保存されています。
(Arch Linux, CentOS 7 にて確認)

/usr/share/i18n/locales/ja_JP

 
修正するのは、”era” の部分。

「○○元年」(+1 で始まるレコード)と「○○年」(+2 で始まるレコード)
を用いて年号の変換を行います。

そして年号は UTF-16BE の順番で書いていきます。

リトルエンディアンでの「令和」のバイト列

できあがった例は次の通り

新しい年号に対応させた ja_JP ファイル.

1つめの “+:1:2019//05//01:2019//12//31:<U4EE4><U548C>:%EC<U5143><U5E74> は
2019年5月1日~2019年12月31日までを「令和(<4EE4><548C>) 元年(<5143><5E74>)」

表記するというもの。

2つめの “+:1:2020//01//01:+*:<U4EE4><U548C>:%EC%Ey<U5E74> は
2020年1月1日以降を「令和(<4EE4><548C>) %Ey(+2)年(<5E74>)」

表記するというものになります。

ですので上記のような ja_JP ファイルを作成し、locale-gen をすると
下記のように新暦に対応することができます。

新暦対応後の図

 


最後に。

Windows や Linux のシステムがかなり柔軟に新暦対応させられる作りになっていることはおわかりいただけたかと思います。
 
ただ、これは一人のソフトウェア作者としてのコメントではありますが
全てのプラットフォームが上記で挙げたような簡単な方法で
すぐ対応出来るようになっているわけではありません。

 
また、上記のようなレジストリキーやファイルを参照するものであっても
(平成)31年から(令和)1年へ変わるわけですので
エラーが発生するシステムも十二分に考えられます。
 
ですので上記の方法で対応ができ、
ご利用のソフトウェアで問題なく稼働した場合でも
これは運が良かったという程度にお考えいただき、
ベンダーの正式対応を基本的にはお待ちいただくようにしてください。
 
上記のリスクにご理解いただけるかたで、新しいものに楽しみを感じるかたは
ぜひ自己責任において新暦対応を一足お先にお試しくださいませ。
なお、それによりデータ破損等が発生しても当方では責任を負いかねます。

・・というわけで。であであー。

“Zsh” on “Arch Linux” on “Windows 10”

どうもみむらです。

最近、Windows 10 の RS1 から “Windows Subsystem for Linux” という機能が乗りました。

早い話が Linux アプリケーションを Windows 10 上で動かせるようになりました、
というような機能でして、 “Bash on Ubuntu on Windows” とも呼ばれたりします。

ただ、私は “Bash” 派ではなく “Zsh” 派だったりして、
また “Ubuntu” 派でもなく “Arch Linux” 派だったりしますので、
ちょいとこの機能を使って、表題のようなことをしてみようかと。


余談ですが・・:

どういう風に Bash on Ubuntu on Windows が実現されているかと言うことですが、
ざっくり書くと Linux 環境で Windows アプリケーションを動かす “WineHQ” の逆操作のような
そんな感じです。

Wine が Windows API 呼出 → Linux システムコール として、動かせるようにしているように、
WSL ではその逆で Linux のシステムコール → Windows API 呼出 に変換して動かすような。

詳しいことはこの記事では触れませんが、
気になる方は Microsoft 社のブログ “Windows Subsystem for Linux Overview” をご参照ください
https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/

日本語ですと ASCII さんの “Windows Subsystem for Linux の中身を詳しく見る” がわかりやすいかと思います。
http://ascii.jp/elem/000/001/246/1246548/

 

また Windows は可能であれば Insider Build  (Fast) の方が対応しているシステムコールが多く
色々と楽しめるかと思います。

このあたりが気になる方は、リリースノートが公開されていますのでご確認ください。
https://msdn.microsoft.com/ja-jp/commandline/wsl/release_notes


Zsh on Arch Linux on Windows のつくりかた:

1. Windows 10 RS1 もしくは Insider Preview の環境を用意する。

(Windows のインストールの仕方は割愛します・・。)

Insider 版のビルドをダウンロードするには:

設定画面を開き「更新とセキュリティ」をクリック。

image

 

左ペインから「Windows Insider Program」を選択し、右ペインの「ファースト」を選択。
(初めての場合は「Insider Preview ビルドの開始」というボタンがあると思いますので、そちらをクリックします)

image

 

あとは Windows Update を実行することで、
運が良ければ直ぐ、悪ければ1日後に降ってくるようになります。
(Insider Preview ビルドを受け取れるようにするためにちょっと時間が掛かるそうです。)

 

 


2.開発者モードを有効にする

左ペインから「開発者向け」を選択し、右ペインの「開発者モード」を選択します。

image

 

 


3. Windows Subsystem for Linux (Beta) を有効化する

3.1. Windows キー + R  で「ファイル名を指定して実行」を表示し、
“appwiz.cpl” と入力して OK を押します。

image

 

3.2. 開いた画面の左側にある「Windows の機能の有効化または無効化」をクリック。

image

 

3.3. 「Windows Subsystem for Linux (Beta)」にチェックを入れて “OK” をクリック。
image

 

 


4. WSL 環境に “Arch Linux” を導入する。

こちらのサイトで公開されているスクリプトを実行して、インストールを行います。
https://github.com/alwsl/alwsl

 

4.1. 適当なフォルダに “alwsl.bat” をダウンロード。
image

 

4.2. コマンドプロンプトを立ち上げる。

何もないところで “SHIFT キー” を押しながら右クリックすると、
「コマンドプロンプトをここに開く」もしくは 「Power Shell ウインドウをここに開く」
というメニューが現れますので、こちらを利用すると楽かと思います。

image

 

4.3. インストール
( “alwsl.bat install” と入力することで、セットアップが実行されます)

image

 

4.4. “bash” と打って実行。

image

そのまま “root” の Arch Linux 環境に入ります。

 


5. 一般ユーザの設定

さすがに Root で使い続けるのはあまり気分が良くないので、
一般ユーザを作成して、最初はそのユーザになるようにします。

5.1. Root のパスワードを設定する。
→ そのまま passwd と入力して再設定を行ってください。

 

5.2. ユーザを作る
※bash コマンドで Linux 環境に入っていない方は ”bash” と入力して Linux 環境に入ってください。

5.2.1. useradd コマンドでユーザを作成します。
ex) useradd mimura1133

5.2.2. passwd コマンドでパスワードを設定します。
ex)  passwd mimura1133 → パスワードを求められるので入力、設定.

5.2.3 ホームディレクトリを Windows と同一にする。
→ “/mnt” 以下に Windows のドライブ名が並んでいますので
シンボリックリンクを張って、同一にしてしまいます。
ex)   ln –s /mnt/c/Users/mimura1133 /home/mimura1133

…纏めるとこんな感じのコマンドを入力していきます:

root@Satoshi:/mnt/e/temp# passwd
New password:
Retype new password:
passwd: password updated successfully

root@Satoshi:/mnt/e/temp# useradd mimura1133

root@Satoshi:/mnt/e/temp# passwd mimura1133
New password:
Retype new password:
passwd: password updated successfully

root@Satoshi:/mnt/e/temp# ln -s /mnt/c/Users/mimura1133 /home/mimura1133

root@Satoshi:/mnt/e/temp# ls -al /home/mimura1133
lrwxrwxrwx 1 root root 24 Mar  9 18:46 /home/mimura1133 -> /mnt/c/Users/mimura1133/

 

5.3. 起動時のユーザを設定

5.3.1. 一度 “exit” と入力して Linux 環境を抜けます

5.3.2. lxrun /setdefaultuser <5.2 で作ったユーザ名>  と入力。

image

 

5.4. 変わったことを確認。

そのまま “bash” と入力して、Linux 環境に入り、
ちゃんと一般ユーザでログインされていることを確認します。

 


6. Zsh の導入。

6.1. Zsh をインストール。
→ root に昇格後  “pacman –S zsh”

※もし失敗する場合は一度 “pacman –Syu” と入力して全体をアップデートしてみてください。

image

 

6.2. bash コマンドで Linux 環境に入っても “zsh” が立ち上がるように細工する。

私の場合は .bashrc に次のように書き込んでおきました:

/bin/zsh
exit 0;

とりあえずこれで、bash コマンドで起動しても zsh が起動し、
zsh の終了と共に Windows 環境に戻ってくるような感じになります。

 


最後に。

image

インストールするとこのような感じでスタートメニュー内に “archlinux” が追加されます。

またここから起動された端末は文字コードが “UTF-8” となっていますので、
何かと便利かな・・と・・!

image

 

また、Windows のコマンドプロンプト・端末周りも Windows 10 になってかなり良くなりまして

image

AA の nyancat もちゃんと表示される良い子になりました。

 

元から Windows, Arch Linux が大好きな人も、そうじゃない人も
もしよろしければお試し下さいー。

サーバの証明書に ECC (楕円曲線暗号) を使ってみる

どうも、みむらです。

先日まで海外旅行に行っていまして、
旅行中に SSL 証明書の有効期限が切れたようで、本サーバもエラー連発になっておりました。

本当にすみません。

 

そのようなわけで証明書を更新するのですが、
どうせやるなら最近話題の楕円曲線暗号を使ったやつを使ってみるのもいいんじゃね!
とふと思いましてやってみることに。

これを機にちゃんと勉強したいですね。

作業する OS は CentOS 7.2 です。


1. 秘密鍵を作る。

生成に際し、どのような曲線が使えるのか知っておきたいので、
次のコマンドで調べてみます。

# openssl ecparam -list_curves
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field

というわけで、上記の3つに対応しているということが分かります。

NSA Suite B を参照してみると (https://www.nsa.gov/ia/programs/suiteb_cryptography/
P-384 にするのがいいよ! とのことなので、
今回は secp384r1 を使ってみることにしてみます。

 

注釈:
実は最初、何も見ずに secp521r1 で行ったのですが、
Chrome において ERR_SSL_VERSION_OR_CIPHER_MISMATCH ということで開けなくなることが分かり
再発行を行いました。

http://security.stackexchange.com/questions/100991/why-is-secp521r1-no-longer-supported-in-chrome-others
こういう記述もあったのですが、具体的に書かれている箇所を見つけられず・・
もし、当該する記述の場所をご存じの方はこっそりと教えて下さい・・。

 

生成に必要な情報が分かったところで、
秘密鍵の生成を次のコマンドで行います。

# openssl ecparam -out server.key -name secp384r1 –genkey

 


2. CSR (署名要求, Certificate Signing Request) を作る。

このあたりは RSA の鍵で CSR を作るときと同じような流れです。

# openssl req -new -sha256 -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

( 意訳:証明書要求に含める情報について答えてください。無回答にしたければ「.」を入力すれば空にもできますよ。)

-----

Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []: Tokyo
Locality Name (eg, city) [Default City]: Taito
Organization Name (eg, company) [Default Company Ltd]: mimumimu.net
Organizational Unit Name (eg, section) []: .
Common Name (eg, your name or your server's hostname): mimumimu.net
Email Address []: customer@mimumimu.net

Please enter the following 'extra' attributes
to be sent with your certificate request

A challenge password []: (何も入れずに Enter )
An optional company name []: (何も入れずに Enter )

 

というわけで CSR が出来ましたので、署名してもらいに行きます。

余談ですが、CSR ファイルの中身はテキストファイルになっていまして、

-----BEGIN CERTIFICATE REQUEST-----
MIIB44KE44GCIO+8iMK044O7z4njg7vvvYApDQrjgojjgYbjgZPjgZ3jgIHjg5Dj
g7zjg5zjg7Pjg4/jgqbjgrnjgbjjgILjgZPjga7jg4bjgq3jg7zjg6njga/jgrXj
g7zjg5PjgrnjgaDjgYvjgonjgIHjgb7jgZrpo7LjgpPjgafokL3jgaHnnYDjgYTj
gabmrLLjgZfjgYTjgIINCuOBhuOCk+OAgeOAjOOBvuOBn+OAjeOBquOCk+OBoOOA
gua4iOOBvuOBquOBhOOAguS7j+OBrumhlOOCguOBo+OBpuiogOOBhuOBl+OBreOA
geisneOBo+OBpuioseOBl+OBpuOCguOCieOBiuOBhuOBqOOCguaAneOBo+OBpuOB
hOOBquOBhOOAgg0KDQrjgafjgoLjgIHjgZPjga5DU1LjgpLopovjgZ/jgajjgY3j
gIHlkJvjga/jgIHjgY3jgaPjgajoqIDokYnjgafjga/oqIDjgYTooajjgZvjgarj
gYQg44CM44Go44GN44KB44GN44CN44G/44Gf44GE44Gq44KC44Gu44KS5oSf44GY
-----END CERTIFICATE REQUEST-----

こんな感じのファイルになっています。 (もちろん、上記のテキストはサンプルですよ!)

 


3.CA (認証局, Certification Authority) に署名してもらう。

ここから先、導入まではすべて通常の RSA での SSL 証明書の手続きと同一ですので、

残りの説明はすべて comodo の公式マニュアルにゆだねます・・!
http://comodo.jp/beginner/setup.html


..というわけで設定が完了しますと、

image

このような感じで、楕円曲線暗号を使用した通信が出来るようになります。

 

ブームに乗れた中二病的なうれしさを感じつつ、
金岡先生の資料 ( http://www.jnsa.org/seminar/pki-day/2011/data/02_kanaoka.pdf ) を
拝読して、これを機に学んでみたいと思います・・!

windbg と gdb に関係した基本操作メモ。

毎回調べている気がするのでメモ。
(たぶんころころ書き加えていきます

 

作業内容 windbg gdb
実行 g r
ブレークポイント bp b
ブレークポイント
一覧
bl i b
(info breakpoint)
ブレークポイント
削除
bc d
ステップ実行
(Step over)
p n
ステップ実行
(Step Into)
t s
メモリ内容表示 d
d(a,b,c,d…)
d
x/(o,x,u,t,8xb..)
変数内容表示 dv (変数名) print (変数名)

p *0x000  みたいなのも可

レジスタの値 (レジスタウィンドウを見る)

dd eax..

i r

i r eax..

逆アセンブル結果 (Disassemble ウィンドウをみる) disas (関数名)
ソースコード (ウィンドウを見る) list (関数名)

 

・・とりあえず、良く忘れるので(

 

あといくつかメモ:

 

gcc でビルド時にデバッグ情報を入れる:
→ gcc –g でビルドしてやる

objdump で Intel 記法で眺められるようにする:
→ objdump –M intel  で眺める。
ex)  objdump –M intel –D a.out   .. のように。

VC コンパイラでデバッグ情報を入れる:
→ cl /Zi でビルドする。

VC コンパイラ環境で objdump っぽいことをする:
→ dumpbin a.exe /disasm  とかやると良い感じ。

CentOS 6.5 に Snorby と Suricata をインストール

どうもみむらです。

IDS というと Snort というイメージも多いかと思いますが、
ふと Google なページをさまよっていたら Suricata というものを見つけましたので、
これを入れてみようかと。

環境としては CentOS 6.5 で Hyper-V 環境。
Windows Server 2012 (Windows 8) 以降の Hyper-V であればポートミラーリングが使えますので
その辺を使いつつ。

今回の環境では eth0 をミラーポートからのデータ受け付け用に
eth1 を管理用に構築してみます。

参考にしたところ:

http://n40lab.wordpress.com/2013/06/02/snorby-in-centos-6-4/
http://n40lab.wordpress.com/2013/05/31/installing-suricata-ids-from-source-centos-6-3/
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Snorby_and_Barnyard2_set_up_guide
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Basic_Setup

 

Snorby が稼働するとこんな感じの画面が出ます:

image

 

かなりの長文なので「続きを読む」を使っていったん切ります・・

続きを読む