投稿者「みむら」のアーカイブ

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

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

Kali Linux で Hyper-V の拡張セッション (Enhanced Session) を有効にする

どうもみむらです。

VirtualBox や VMware だとできるのに、
Hyper-V だと出来ない事。色々とあります。

多分一番大きなところは、共有クリップボードでしょうか。

最近 ESXi に VMware Remote Console でつなぎに行ってもクリップボードが使えなくなりまして
なんとも悲しい思いをしています。

さて。

Hyper-V では Linux で通常セッションは普通使えないのですが、
ふと「拡張セッションは本当に有効に出来ないのかな・・?」と思いやってみました。

結論としてはクリップボードの共有も、画面の高速な描画も出来した。


How to Implement.

1. 普通に Kali Linux をインストールします。
(Install the Kali Linux.)

2. 下記のスクリプトを Root で実行します。
(Execute the script with Root account on Kali Linux.)

bash –c “$(curl –sL https://go.mimumimu.net/2CQlyKy)”

# Do you want to check the code?, please check the page: 
# https://gist.github.com/mimura1133/25451be04929d65993e0fb658d0b6890

3. Kali Linux をシャットダウンします。
(Shutdown the Kali Linux.)

4. 管理者権限の PowerShell で下記のコマンドを実行します
(Execute the PowerShell Script with Administrator Account on Host Windows OS)

Set-VM –VMName <YOUR_VM_NAME> -EnhancedSessionTransportType HvSocket

5. Kali Linux を起動します。
(Start the Kali Linux VM.)

正常にインストールが完了していれば、
5番で起動した際に、下記のように「拡張セッション」で接続しなおすように聞いてきます。

( When open the VM window, it will ask you an window-size settings if you’re finished the installation successfully. )

image

で、これって何をやっているの?

元ネタはこれ。
( Sneak Peek: Taking a Spin with Enhanced Linux VMs – Virtualization Blog )

https://blogs.technet.microsoft.com/virtualization/2018/02/28/sneak-peek-taking-a-spin-with-enhanced-linux-vms/

下図が凄く分かりやすいのですが、
Hyper-V の 拡張セッションモードは内部的に “RDP” を利用して機能が実現されています。

早い話がリモートデスクトップのあれです。

Windows Server 2012 R2では、キーボードなどのドライバの代わりにリモートデスクトップサービスに変更される


(Src : https://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B330#fbid=M3oY0SjYJi2 )

今回のスクリプトを確認頂くとわかるのですが、
XRDP を用いて、VMCI (hv_sock) 経由で RDP 接続を受け付けることで
今回の「拡張セッションモード」を実現する、という構図です。

Ref : https://gist.github.com/mimura1133/25451be04929d65993e0fb658d0b6890


他の Linux 用のサポートはないの?

あります。

Microsoft のリポジトリで Arch Linux 用と Ubuntu 用が提供されています。
https://github.com/Microsoft/linux-vm-tools

Redhat 系列の場合は、xrdp パッケージが vsock オプションが使えるようにビルドされていませんので、
SRPM を取ってきてコンパイルオプションを設定してコンパイルしなおせば動きます。


というわけで、私自身の作業環境がこれでぐぐっと作業しやすくなりました。
であであー。

Hyper-V Server をブラウザから制御出来るようにする

どうもみむらです。

“Project Honolulu” というものが Microsoft さんから発表されたのも数ヶ月前
気がついたら “Windows Admin Center” という名前になっていましたので
少し試してみました。


Windows Admin Center とは?

ブラウザベースのサーバ管理ツールです。

2018-07-16 (3)

こんな感じで、サーバをごにょごにょとブラウザから管理することができます。

ツール類はかなりまとまっていて、
単純に “Server Manager” が ブラウザベースになったとかそういう感じではなさそうで、
使いやすい印象を受けました。

公式ドキュメントは次の URL にあります:
https://docs.microsoft.com/ja-jp/windows-server/manage/windows-admin-center/overview

ダウンロードは下記リンクから:
https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/understand/windows-admin-center


Hyper-V Server + Windows Admin Center 環境を作ってみる

今回は執筆時点 (2018/07/16) で最新である
Windows Insider Preview Server Hypercore Build 17709  と
Windows Admin Center Preview 1806 を組み合わせて構築してみます。

Step 0. (Hyper-V 上で検証環境を構築したい人用の事前準備)

PowerShell にて下記のようにコマンドを叩き、 Nested VM を有効にしておきます。

Set-VMProcessor –VMName <VMName> –ExposeVirtualizationExtensions $true

Step 1. Hyper-V Server をインストール

通常通りインストールを進めます。

途中、下記のような表示が出たときは “I don’t have a product key” を選択して進めます。

image

Step 2. Administrator のパスワード設定

Insider 版ですと、初回ログイン時にパスワード設定に遷移しないようですので、
下記のコマンドを打って Administrator のパスワードを設定します。

net user Administrator *

Step 3. Windows Admin Center のインストール

Windows Admin Center のインストールを実行します。

インストーラのファイルは USB メモリか共有フォルダを作成して転送すると良いでしょう。

共有フォルダを作成して共有設定する例:

mkdir c:\SHARE
net share SHARE=C:\SHARE /GRANT:Everyone,FULL

セットアップ途中、下記のようなダイアログが表示されますので
必要に応じて適宜設定を変更します。

image

Step 4. Windows Admin Center に接続する

適当なブラウザから、先ほどセットアップした環境に接続します。

特に何も無ければ下記のような画面が表示されます。

image

サーバをクリックすると、下記のようにログイン情報を聞かれますので、
先ほど設定した Administrator アカウントを設定します。

image

image

また、もしこのとき、ブラウザからユーザ名とパスワードを聞かれた場合は
”Administrator” と設定したパスワードを入力して進めます。

上手く接続が完了すると、下記のように設定画面が表示されます。

image

あとは自由に VM を立てたり設定を変更したりしましょう!


私の環境でもついこの前から Server マネージャによる管理 (RSAT) ではなく
Windows Admin Center に切り替えて使っています。

まだ一部手が届かない所はあるものの、概ね使い勝手は良く、
今後の更新もかなり期待できるのではないかと期待しています。

利用者はまだ少ない印象を受けますが、
ブラウザで管理出来るという点や、ワークグループ環境でも設定変更をせずに動いてくれるところ
(ex. TrustedHosts の設定を変えたり、ネットワークを Private に変更したり etc..) があったりと
便利ですので、平行して導入を検討してみても良いのかも知れません。

#ssmjp 2018/05 に参加してきた。

20180524_100644896_iOS

 

気がついたら一番前の演題の前に「blog枠」という席が用意されていて
そこに座っていました。

 

どうも、みむらです。

 

前回参加した際に、  
知り合いに「実は5月は喋るんですよ!」と前回参加時に教えてもらいまして
その時から、これは行かねばならぬ、と使命感的なものを感じておりました。

 

うそです。前回が楽しかったから参加してます。
もちろん、知り合いの発表もわくてかですよ。

 

冗談はさておいて、#ssmjp です。 

 


 

#ssmjp の勉強会について。

 

アウトプットしないのは知的な便秘

 

「インフラ/運用」がテーマの勉強会。
でも「面白ければ別に IT じゃなくても何でもいいんじゃない?」というポリシー。

@tigerszk 先生のクソコラが見られるのは ssmjp だけ!

 

大人数の前で喋ることの練習の場として利用するのも OK.
気軽な気持ちで参加をすればよい、とのこと。

喋りたい方はサイトを確認してくださいとのことですので、
チャレンジしてみてはいかがでしょうか。
http://ssm.pkan.org/

 


 

“KYT” の話

Speaker : @actanx93 さん

 

KYT とは?

危険予知訓練 (Kiken Yochi Training) のこと。
労働安全衛生法の中でも実施する事が述べられている。

ある事象に対して「危険の例」と「対策の例」を考えていく。
ex.) http://jafmate.jp/jmp/prediction_of_risks/

 

実際の IT のケースに適用してみる

たとえば「バックアップ」をするために下記のオペレーションを実施することを考える。
どのような危険があるか?

cd ~ftp
mkdir etc
cd etc
cp /etc/group /etc/passwd .

考えられること:

どこで読み書きしてる?
cp コマンドの末尾の “.” を忘れると、 /etc/group で /etc/passwd で上書きする危険性がある
  ..などなど…

では、どうすべきか?
→ 「作業用のディレクトリにまるっとコピーしてから」「全部フルパスで」 etc…

他にも色々と考えられる。
→ “tar cvzf backup.tar.gz *.html” と打とうとして “tar cvzf *.html” と打ってファイルを破壊する
→ “kill –9” と打とうとして “kill 9” と打って PID:9 のプロセスを殺してしまう..

 

危険予知トレーニングの実施の意義

はじめて実施する作業に対して適用し「危険工程」を見つける(嗅覚を磨く)ことで
オペミスやトラブルを少しでも未然に防げるようにする。

「暗黙知」をトレーニングを通して「形式知」に変換し、「共有知」に持って行くことができる。
→ 同時に “手順書” “ドキュメント化” の課程における手助けになる。

「ビギナー」や「若手」に KYT を適用するのも凄く有用。

 


 

続・広く知って欲しい DNS のこと
~DNSの運用をちょっとずつよくしていく話~

Speaker : 中島さん  (DNSOPS.JP)

 

前回までのあらすじ

前回はこちら : https://www.slideshare.net/nakatomoorg/ssmjpdnssecurity

 

今回の内容

DNS やドメインにまつわるちょっと耳寄りの話を通じて、
DNS の運用品質がちょっと良くなる、トラブルを未然に防止できる。

 

DNS とは?

ネットワーク上で名前解決を行うためのプロトコル
SSL 証明書や送信ドメイン認証など、認証の目的としても使われている。

ネームサーバ
ゾーン情報の公開。権威 DNS サーバのこと。  

フルリゾルバ
ネームサーバで公開されている情報をルートからたどって参照できるリゾルバ。
再起問い合わせとキャッシュの機能を持つ。  

スタブリゾルバ
再起問い合わせ機能を持たない。単に名前解決をしたいだけ。
よくあるクライアントOSのDNS設定はこのスタブリゾルバの設定。

レジストラント
登録者(使いたい人)  

レジストラ
登録取次事業者 (レジストラント <—[WEBUI など]—> レジストラント)  

レジストリ
登録管理機関 (レジストラ <—[EPPなど]—> レジストリ)

 

ドメインハイジャックなどの危険から守る技術

・・・ドメインの情報を書き換えられたら、ビジネスにもかなりの影響が出る。
そのため、各種保護する機構が存在する。

「レジストリロック」
→ WHOIS の登録情報変更を制限する。

「レジストラロック」
→ ドメインの移転や削除を制限する機能。

また、各社において多要素認証なども始まっている。

 

ドメインが利用不可になることも。

example)
serverHold (Expire) : ドメイン有効期限切れ。
clientHold : 登録情報不備。無効なメールアドレスをずっと設定し続けた場合など。

ほかにもネガティブキャッシュという存在があり、ちゃんと見ていないとサービスが止まる可能性がある。
「その名前が存在しないこと」をキャッシュするキャッシュ
 JP ccTLD なら 900.  gTLD なら 86400. が TTL として設定されている。

 

DNS は自前で運用する必要ありますか?

熊本地震の際に、ある自治体のウェブサイトが参照不可になった。
→ 権威 DNS サーバ2台が同一サブネット上にあり、2台とも到達出来なくなっていたことがある。
(ref : https://dnsops.jp/event/20160624/h28_kumamoto_earthquake.pdf)

 

DNSSEC, RPKI はできればしっかりと設定したほうがいい。

MyEtherWallet.com の事例は、これらで防げた。

なぜ? : 経路ハイジャックと不正な DNS 応答の合わせ技だったため。
→ どちらか一方だけでも「攻撃成功の難易度」が格段に高まる。

 

余談

「ヒト」「モノ」「カネ」のバランスは重要。
深圳が特に回っている例。

GDPR対応
→ “GDPR Legal Analysis” 参照.

Registration Data Access Protocol (RDAP)
→ Whois に変わるドメイン登録者データへアクセスするプロトコル。
→ GDPR の対応に際し、こちらへの移行が後押しされている。

 


 

DNS トンネリングの手法

Speaker : shutingrzさん

 

DNS トンネリング?

DNS通信に別の目的を持った情報を含めること
偽装通信の一つ。

暗号通信
「どのようなデータが流れているか」を分からないようにする。
データが流れていることに関しては把握されてもよい。

偽装通信
「意味あるデータを送信していることを知られないようにする」こと

 

マルウェアの通信にもよく使われる。

マルウェアは Malicious Ware の通信。
悪意あるソフトの通信、ということで狭義のウイルスということになる。

普通は HTTP が使われる。ほとんどのPCで喋れて、なんだかんだ外に出られるから。
一方、DNS もまた、ほとんどの PC で喋れて、なんだかんだクライアントの通信が外に出られる。
HTTP と同じような属性を持っている一方で
 HTTP 程ちゃんと見ていないことが多いために悪用されてしまう。

 

もちろん、正規の目的として VPN の手法としても使われる。

ソフトイーサ社の VPN で利用されているのが有名。

 

実際にどうやって通信するのか検討してみる。

1. まずは Basic に “TXT” レコード, “QNAME” を用いて通信してみる。
→ 行きは “QNAME” (雑に書けば 「ドメイン名」)
→ 帰りは “TXT” に直接や “A” に符号化した上で入れてみる。

2. EDNS0 や RRSIG といった、DNS クエリのあまり知られてなさそうなとこに押し込んでみる。
→ 「フルリゾルバ」を経由する場合は使えない。でも直接通信できるなら強力。
→ EDNS0 なら仕様に “PADDING” などもあるので隠せる。

 

ではこれを鑑みて、どう対策する?

直接通信させないようにフィルタを掛けるのが第一歩。
なぜ?:フルリゾルバを経由させると下記の利点があるから:

・同じ “qname” と “RR” は TTL秒キャッシュされるのでリアルタイム通信に適さなくなる。
  (DNS の仕様からすると普通ではありますが・・。)

・再起問い合わせに不要なデータは削除される。

上記の理由から “QNAME” をガシガシ変えて頑張るパターンが鉄板となってくる。

また 「人間は何らかの既知の用語を使って名前を付けることが多い」 ことから
辞書との単語距離を取ることで、機械的に生成されたドメイン名を発見できる可能性がある。
(ex. http://blog.trendmicro.co.jp/archives/3799 )

 


 

宣言型デプロイツールの「正しい」考え方

Speaker : tcsh さん

 

やりたいこと「運用自動化」

 

よくある風景

管理職「現場に任せた」
実装者「ノリノリ」「おれすげー」
メンバー「なんとなくすごそう」

そして、実装者が居なくなってしまい、メンバーが気合いでリバースして調べたり・・。

 

宣言型デプロイツールでよくある光景

「宣言型デプロイツール、いいね!」 → 実装者の10割。
「他人から引き続いたけど、宣言型デプロイツールいいね!」という人を見たことがない。

そして、Chef で書いていたものを引継担当者が Ansible で書き直したり・・。

 

こういう人は2つのことを目指すことに陥りがち

「再現性」
→ 「手を動かしたら負け。再現性!再現性!! 全部自動化してやるぜ!!」

「汎用性」
→ 「みんなこのツール使おうぜ!!」

・・・・メンテできない標準ツール、工数掛けた割に汎用性もイマイチ
新規案件で使うのにも手間が掛かる・・・そんなものに2~3年後になっていることが多い。

 

さてどうするか。

もちろんまずは引き継げるように
何をやっているか、どういうモノなのかはちゃんとドキュメント化する

その上で「再現性」「汎用性」のどちらを取る?
「汎用性」は多くの場合「幻」となる。

・範疇が不明な「汎用性」は未定義と同義
・「汎用性の定義」は上手くいかない。
・「汎用性の確保」は上手くいかない。

→ 「再現性は意外と確保できる」 (何かを捨てることで実現できる再現性)

・汎用性を捨てると再現性が高くなる
・多機能を諦めると再現性が高くなる
・変更や追加をやめると再現性が高くなる

 

宣言型デプロイツールのメリット

・再現性を追求して設計すること。
→ シンプルに、小さく。

→ デザインできない場合 UNIX コマンドの設計思想を考えるとイメージ化出来るかも。

 


 

巻末に

今回もとても面白かったです。
次回も同じ会場とのこと。 さて、申し込みますかねぇ・・!

DC-HC4FSPEC が繋がっている状態で Windows 10 のアップグレードを成功させる。

どうもみむらです。

変なカードだったり、なんかきらびやかに光るカードだったり
お店で何かと目に付くカードって買ってきちゃいますよね。

DC-HC4FSPEC もそんなカードの一つ。

ただこのカード、色々と不具合連絡も出ていまして
特に Windows 10 の大型アップデートの際には
アップデート中でフリーズしてしまうとか。

私もそのフリーズしてしまった環境を持つ一人。

カードを抜けば治るんでしょうけれど
怠け癖が付いていると、そんなことをしたくなく、ソフトでなんとかしたくなる。

というわけで、とりあえず問題なく進められる方法を見つけたので
メモ程度に書いておきます。


1.Windows 10 のインストールメディアを作る。
→ あとでここから起動して、レジストリ操作を行えるものであれば OK です。

2.Windows 10 のアップグレード (Windows Update) を開始する。
→ 私の場合は Windows Insider なので、頻繁にビルド更新がやってきます。

3. フリーズするまで待つ。
→ セットアップをしていると途中でフリーズします。
フリーズしたら、「1」で作成したメディアを挿入し、そこから起動します。

4.インストールメディアから起動してレジストリ編集を行う。
→ “C:\Windows\System32\config\SYSTEM” のハイブを読み込みます。

5. VEN_11AA から始まるキーを削除。
image
→ DRECAP DC-HC4FSPEC に関するデバイス情報を削除します。

6.再起動

7.セットアップを完了させる。


以上となります。

セットアップがフリーズするタイミングは、
デバイスに対してドライバをインストールしていくタイミングのようなので、
今回のこれでは「デバイスがまだ認識されていない」状態にして回避しようというもの。

もちろん、セットアップ語にドライバだけ入れ直せば正常に動作します。

・・・・というわけで、もしお困りの方でレジストリ編集が行えるかたでしたら
試してみてはいかがでしょうか。

みむら