2015年4月16日木曜日

OpenLDAPのFREAK(CVE-2015-0204)対応

ググっても見つからなかったので、とりあえず自分のところでの対応をメモ。
まずは問題の存在を確認。
# nmap -Pn -p T:636 --script ssl-enum-ciphers localhost

Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT    STATE SERVICE
636/tcp open  ldapssl
| ssl-enum-ciphers: 
|   TLSv1.0
|     Ciphers (17)
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA
|       TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
|       TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
|       TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
|       TLS_RSA_EXPORT_WITH_RC4_40_MD5
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA
|       TLS_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
|       TLS_RSA_WITH_DES_CBC_SHA
|       TLS_RSA_WITH_RC4_128_MD5
|       TLS_RSA_WITH_RC4_128_SHA
|       TLS_RSA_WITH_SEED_CBC_SHA
|     Compressors (1)
|_      uncompressed
OpenLDAP+OpenSSLを使っているので、olcTLSCipherSuiteの設定でExport grade cipherを無効にする。 OpenLDAP+GnuTLSを使っている場合は自分で調べてください。
# cat tls-cipher.ldif
dn: cn=config
add: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!ADH:!aNULL:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM

# ldapmodify -Y EXTERNAL -H ldapi:/// -f tls-cipher.ldif 
slapdを再起動。
# service slapd restart
対応が出来ていることを確認。
# nmap -Pn -p T:636 --script ssl-enum-ciphers localhost

Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT    STATE SERVICE
636/tcp open  ldapssl
| ssl-enum-ciphers: 
|   TLSv1.0
|     Ciphers (12)
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA
|       TLS_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
|       TLS_RSA_WITH_RC4_128_MD5
|       TLS_RSA_WITH_RC4_128_SHA
|       TLS_RSA_WITH_SEED_CBC_SHA
|     Compressors (1)
|_      uncompressed

2012年8月9日木曜日

AndroidとPCをUSBケーブルでネット接続

無線LANが使えない環境で、rootを取らずにAndroidとPCをネットワーク接続出来ないものかと色々調べていました。
  • adb forwardとAndroidのSSHサーバーの組み合わせ
    Androidで動いているsshdのポートをadb forwardでPCに持ってきておいて、今度はそのポートにssh接続してtunnelを作ってみましたが、どうやらAndroid側で新規にポートを開くのが許可されていないらしく失敗。
  • USB TunnelとWindowsアプリの組み合わせ
    AndroidアプリのUSB Tunnelとadbを使ったWindowsアプリでネットワークを構成するのですが、Windowsアプリが必要という時点で対象外。
  • adb ppp !!
    よくよく調べてみると、adbにpppコマンドがあることを発見。
    ドキュメントがほとんど無かったのですが、とりあえず次のコマンドを実行してみると、PC側、Android側のそれぞれにppp0インターフェースが出来て、IPアドレスも振られることが確認出来ました。
    adb ppp "shell:pppd nodetach noauth noipdefault /dev/tty" nodetach noauth noipdefault notty <local-ip>:<remote-ip>
    その後、Android側からpingを打ってみると、きちんと反応が返ってきて接続が出来ているようだったので、今度はブラウザでアクセスしてみたら反応なし。
    ルーティングがおかしいのかと思ったり少し悩みましたが、そういえばFirewallということで、iptablesの設定を変えてみたら、無事にAndroidのブラウザからUSBケーブルを通してPCの鯖が見えるようになりました。

2012年7月31日火曜日

iCou 8はまだ来ない

注文してから、そろそろ2ヶ月。
届く気配はまったくありません。
悲しい予想が当たりそう…

Androidでけいあん!!!

NDKでusb_setinterfaceを実装してみたのですが、いろいろ試してみたところAndroidのUSBホスト機能だけでもなんとかなることが判明。 結局JavaだけでTSを取り出すところまで出来ました。

はじめTSは取得出来ているのにデータの中身がぐちゃぐちゃで、なにかバグを埋め込んだかと悩みましたが、これはチューナーのチャンネルを設定した後、ある程度の時間を置いて安定するまでのデータを捨てることで解決。

ただ、処理が追いついていないせいか0.3%くらいのパケットがドロップしています。

次はワンセグの切り出しと、パフォーマンスチューニングかな。

2012年7月28日土曜日

Androidでけいあん!!

recfsusb2nのC++からAndroid Javaへの移植はほぼ完了したのですが、最後の最後でつまりました。

いろいろ初期化してチャンネル合わせて、最後にストリームの転送を開始するコマンドを送るところで、それを送るのに使われている usb_setinterface というAPIがサポートされていないことがわかりました。

面倒くさいのとCPU依存になってしまうのでいやだったのですが、しょうがないのでNDKにまで手を出すことに。
ざっと調べたところ、NDKだとioctlは使えるようだし、USBホスト機能側からファイルディスクリプタも取得出来るようなので、なんとかなりそう。

でも結局NDKにまで手を出すんだったら、はじめからそっちでやっておけば、わざわざJavaへの移植しなくても良かったのにというのはあります…

2012年7月22日日曜日

Androidでけいあん!

AndroidでUSBホスト機能が使えるようになったので、recfsusb2n Linux版を参考にしてFSUSB2の初期化ロジックまで作ってみました。

まだきちんと確認出来ていませんが、いちおうチューナーとカードリーダーの両方とも正常に初期化出来ているようです。

あたりまえと言えばあたりまえなのですが、AndroidのUSB機能のAPIは、ほぼLinuxのAPIと同じなので、いまのところの作業としてはC++のコードをJavaに移植しているだけに近いです。そのためbyteとintの相互変換が多くなっていて、Java的にはかなりパフォーマンスが悪そうなので、後でチューニングの必要がありそうです。

unsignedな数値型が無いことも含めて、やはりJavaはハードウェア寄りのコード書くのには向いていない気がします。

2012年7月20日金曜日

AndroidのUSBホスト機能

Androidの3.1以降ではUSBホスト機能がサポートされたので、比較的簡単にUSB機器と通信するプログラムが書けるようになっています。
http://developer.android.com/guide/topics/connectivity/usb/host.html

FSUSB2がLinuxで使えるのは確認出来たので、今度はAndroidアプリから認識出来るか試してみたら、ハマってしまい何時間か無駄にしたのでメモしておきます。

ポイントは2つ。
  1. 本体でUSBホスト機能が有効になっていなかった。

    カーネルはUSB機器が接続されたことを認識しているのに、Android側に何もメッセージが飛んでないので、原因を調べるのに随分かかりました。わかってしまえばなんのこともない。

    これはD70Wがそうだっただけなのかもしれませんが、Android 3.1以降でもUSBホスト機能が有効になっていないことがあるみたいです。

    下記の内容のファイルを android.hardware.usb.host.xml という名前で作成しておいて 、
    <?xml version="1.0" encoding="utf-8"?>
    <permissions>
        <feature name="android.hardware.usb.host" />
    </permissions>
    このファイルをAndroidの /system/etc/permission ディレクトリに置いてからリブートすれば、USBホスト機能を有効に出来ます。

  2. USB機器を特定するためのIDの指定が10進数だった。

    AndroidアプリがFSUSB2に特定して反応するように device_filter でベンダーIDとプロダクトIDを指定するわけですが、ここに16進数でIDを指定していたのでメッセージが受け取れていませんでした。

    lsusbの出力にしろ、あちこちに出てくるメッセージにしろ、IDは16進数で表示されているので、それをそのまま設定していたのが敗因でした。
    これは16進数を10進数になおして設定すれば良いです。
以上で、AndroidアプリからFSUSB2を認識するところまでは確認出来ました。