悪霊にさいなまれる世界 -The Demon-Haunted World

30代独身機械系技術者が雑記/セキュリティ/資産運用なんかを書きます/PGP・GPG Key:BC884A1C8202081B19A7A9B8AB8B419682B02FF8

キーボード・マウス・液晶モニタ・LANケーブル無しでRaspberryPiを初期セットアップする

買ったはいいものの余り使い道がないRaspberryPi、せっかくなのでADS-Bの受信をしてFlightradar24にアップロードでもするか、と思い立ったが、電源・LAN・アンテナ線とケーブルが3本になり非常に移動しづらい。そこでLANをWiFiに変更し、色々とソフトを入れてみたところ見事に起動しなくなった。と言うわけでせっかくの機会なのでRaspberryPiセットアップ手順2020年度版を書こうと思い立ったのである

f:id:scienceasacandleinthedark:20200605202043j:plain

ラズパイ本体・モバイルバッテリー・チューナ・アンテナの組み合わせ。持ち運びは便利だが、胡散臭さここに極まれりという感じである。

さて、RaspberryPiのセットアップをしている記事を見ると初期設定時には液晶を繋いだりキーボードを繋いだり、中々面倒なことをしている。しかし実はそんなモノは必要は無い。必要なのは愛と勇気とTeraTermだ。TeraTermは下記リンクから入手できる。別にPuTTYでも良い。

https://ja.osdn.net/projects/ttssh2/releases/

我々は独自の世界を建設している。新しい理想郷を建設するのである。 したがって伝統的な形をとるキーボードも液晶ディスプレイもいらない。LANケーブルもいらない。

さてさて、気がつけばRaspberryPiのデフォルトOSがRaspbianからRaspberryPi OSと言う名前に変更になった。現状は32bit版がしかないが、近いうちに64bit版もリリースされるらしい。しかもMicroSDカードへの書き込み機能なども付いたRaspberryPi OS Imagerなるものまで配布が開始されている。もちろんそれを使うのもいいだろうが、個人的にはtorrentでサクサクとダウンロードしてしまう方が好みなので使わない。そういうわけでここからが手順になる。

  1. CUIでしか使わないのでRaspberry Pi OS (32-bit) Liteを選択する。

    Download Raspberry Pi OS for Raspberry Pi
  2. Rufusを使ってMicroSDカードへの書き込みを行う。

    Rufus - The Official Website (Download, New Releases)

  3. ssh有効化のため、母艦PCでSDカードを読み込み、ルートにsshと言う空ファイルを作成

    SSH (Secure Shell) - Raspberry Pi Documentation

  4. WiFiに自動で接続させるための設定ファイル、wpa_supplicant.confを作る。内容は接続先のWiFiSSIDパスフレーズを入力する。パスフレーズは暗号化することが望ましいが、とりあえずここでは平文で構わない(あとで変更できる)
    country=JP
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
        ssid="SSID"
        psk="Password"
    }
    
    これでOK。ステルスESSIDの場合や、より高度なオプションを使用したい場合はArchLinux Wikiなどを参照すると良いだろう。

    WPA supplicant - ArchWiki

  5. wpa_supplicant.confsshと同様に、MicroSDカードのルートに保存する。これだけで自動的に接続してくれる。
  6. RaspberryPiにSDカードを挿入し起動。ルータからDHCPで割り当てられたIPアドレスを確認(ラズパイのMACアドレスは基本的にB8:27:EBで開始されている)する。

ここまでが母艦PCでの操作。ここからTeraTermで接続し、CUIでの作業になる。

  1. TeraTermSSH接続。ID/Passはデフォルトのpi/raspberry。
  2. セキュリティのためおもむろにルートでのログインをロック。vimをインストールする。
    sudo passwd -l root
    sudo apt install vim -y
  3. さらにSSH接続をLAN内に制限。
    sudo vim /etc/ssh/hosts.allow
    sudo vim /etc/ssh/hosts.deny
    hosts.allowsshd:192.168.11.0/24hosts.denysshd:allを追加
  4. IPアドレスDHCP割当から固定に変更。
    sudo vim /etc/dhcpcd.conf
    下記行を追加
    interface wlan0
    static ip_address=192.168.11.4/24
    static routers=192.168.11.1
    static domain_name_servers=192.168.11.1
  5. タイムゾーンWiFiエリアを設定。2.4GHz帯WiFiは実は国別で使えないチャンネルがあったりするためである。ちなみに日本は14ch全てが使える。
    sudo raspi-config
    の4より、Change TimezoneでASIA→TOKYOを、Change WLAN CountryでJPを選択。
  6. systemd-timesyncdを設定。
    sudo vim /etc/systemd/timesyncd.conf

    NTPとFallbackNTPの2項がある。オーソドックスにNICTとntp.orgのプール、あるいはGoogleのNTPでいい。大学ならSINETのサーバがネットワーク的に一番近いかもしれない。

    [Time]
    NTP=ntp.nict.jp
    FallbackNTP=0.jp.pool.ntp.org

    timesyncdを起動。

    sudo timedatectl set-ntp true

    状態を確認

    timedatectl status

    これでNTP serviceがyesになってればいい。

  7. SDカードの寿命を延ばすためにスワップファイルを無効にする。おまじない程度。
    sudo swapoff --all
    sudo systemctl disable dphys-swapfile
  8. パッケージ類を全てアップデートして再起動する。以降は固定割り当てしたIPアドレスで接続できる。
    sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade -y && sudo apt autoremove -y && sudo apt autoclean -y
    sudo reboot

ここまでで最低限の設定は終了。平文のWiFiパスワードが保存されているのが気持ち悪い場合、WPA supplicantを使用して暗号化パスフレーズに変更する。

  1. wpa_passphrase SSID Passwordを実行。するとWPA用の暗号鍵が生成され、下のような出力が得られる。
    network={
        ssid="SSID"
        #psk="Password"
        psk=b99d2c0fb66194f93ad52b71051e1095dc76e12529321334b3feb18332608eb7
    }
    ダブルクオーテーションのついていないpskの行をコピーする。
  2. /etc/wpa_supplication/wpa_supplicant.confを開き、上でコピーした行を貼り付ける。平文パスフレーズの行は削除し良い。母艦PC側でも同様にしておこう。今後はこれがそのまま使える。

最期に、SSH接続をパスワード方式から意識高く公開鍵方式に変更する。

SSH設定参考サイト:Secure Secure Shell

  1. まずはTeraTermSSHの鍵ペアを作成し、母艦PCに保存する。ここはセキュリティが高く処理も速いEd25519方式を指定する。なお、秘密鍵TeraTermのフォルダに保存するとなぜか接続が失敗するので、その場合は作業用のフォルダを作ってそこに保存する。

    f:id:scienceasacandleinthedark:20200606092851p:plain

  2. TeraTermの「ファイル」から「SSH SCP」を選択し、公開鍵"id_ed25519.pub"を"Authorized_keys"としてRaspberryPiに移動。

    f:id:scienceasacandleinthedark:20200606093857p:plain

  3. RaspberryPi側の設定を行う。ssh用のディレクトリを作成し、公開鍵を移動。パーミッションを設定。このときにsshディレクトリの所有者・グループをroot:rootからpi:piに変更しておかないといけない(ここで引っかかった)

    sudo mkdir .ssh
    sudo chown -R pi:pi .ssh
    sudo mv authorized_keys .ssh/authorized_keys
    sudo chmod 700 ~/.ssh/
    sudo chmod 600 ~/.ssh/authorized_keys
  4. SSHの設定を変更。
    sudo vim /etc/ssh/sshd_config
    下記行を追加しルートでのログインを禁止、ポートを変更、キーファイルを指定、パスワードでのアクセスを禁止。
    PermitRootLogin no
    Port 34513
    PubkeyAuthentication yes
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    AuthorizedKeysFile /home/pi/.ssh/authorized_keys
    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
    
  5. 変更を保存しSSHを再起動。ただしミスがあったときアクセスの方法がなくなるのでこのとき開いているTeraTermは閉じない。
    sudo systemctl restart ssh.service
    新たにTeraTermのウィンドウを開き、新しいポートでアクセス。パスフレーズではなく"RSA/DSA/ECDSA/ED25519鍵を使う"を選択し、1.で保存した秘密鍵を指定。アクセスできることを確認する。また、パスフレーズでのアクセスが通らないことも確認する。

問題が無ければこれで初期設定は終了。楽しいラズパイ生活を楽しもう

FirefoxのPDFビューワでデフォルトのページ表示サイズを変更する

調べたけど日本語の資料がなかったので。

about:configpdfjs.defaultZoomValueの値を弄ってやればいい。

  • デフォルト(空白)or Auto:自動ズーム
  • page-width:ページ幅に合わせる
  • page-height:ページ高さに合わせる(と言う設定項目はないが高さに合わせてくれる)
  • page-fit:ページのサイズに合わせる

いまどきわざわざAdobe Readerとか入れなくてもいいよね的なアレ。以上。

メモ:Firefox設定変更

いつものユーザビリティを保持する変更3つを自分用にメモ

    • 新規タブをバックグラウンドに開く
      browser.tabs.loadDivertedInBackground
      faluse → true
    • 新しいウィンドウではなく新しいタブで開く
      browser.link.open_newwindow.restriction
      2 → 0
    • ロケーションバーと検索バーを新しいタブで開く
      browser.search.openintab
      faluse → true

以上。

イランでのウクライナ機撃墜を受けてIFF(敵味方識別装置)について調べてみた

国際空港の側で敵機どころか民間機もわからんで撃墜するとか、クビの上に着いてるのは帽子掛けか、ちゃんと識別はできなかったのか? と言う疑問点から出発し、そういえば敵味方識別装置については以前から気になってたけどまとめたことはなかったな、と思い英Wikipediaを参考に呟いた内容をまとめる。

出典が英Wikipediaかよ、と言う人はもっといいソースで調べてわかりやすくまとめてくれて良いんですよ。お願いします。 

さて、IFF (敵味方識別装置、Identification Friend or Foe) である。劇場版バトレイバー2のワンシーンを思い出す人も多いだろう。システムは第二次世界大戦時のイギリスにまでさかのぼる。そこら辺の古い話はせず、現用のMark XIIのみに絞る。なおMark XIIの前は1950年代に開発されたMark Xで、パト2でもでてきたSIF (Selective Identification Feature) と言う単語もその頃から使われるようになった。

さてさて、敵味方識別装置と言っても、基本的に民間の航空管制用のSSR(二次レーダ、Secondary Surveillance Radar)と同様である。レーダから送信を行い、機体の反射波だけで機影を補足する一次レーダとは違い、レーダ側からは問い合わせを行い、相手に応答させるのが二次レーダである。この場合IFFインテロゲータから1030MHzの質問電波を出し、IFFトランスポンダが1090MHzの応答電波を出す。

近年使われている民共モード3であれば3回送るパルスの間隔で、さらに質問電波のタイプをAからDに区別する…が、使われているのはAとCだけだ。パルス1とパルス3の間隔が8マイクロ秒ならモードA、21マイクロ秒ならモードCとなる。

f:id:scienceasacandleinthedark:20200112200608j:plain

モード3の質問電波

モードAが機体を識別する8進数4桁*1のスコークコード*2を問い合わせ、モードCが気圧高度計の値を100ft単位で問い合わせる。トランスポンダは問い合わせに対し、自動的に回答する。

f:id:scienceasacandleinthedark:20200113132330j:plain

F-15Aのコクピット。HUDのすぐ下に"MODE 3/A"と現在のスコークを表示する部分がある。(米空軍国立博物館のページより)

このモード3、前述の通りトランスポンダは自動的に質問電波に必ず答えるので、軍用機では発信位置から三角測量で敵に位置がバレてしまうため困る。よって軍用のモード4では、モード3/Aと同じような問い合わせを暗号化して行い、トランスポンダは予めセットされたコードと一致を確認してから、さらに位置を分りにくくするため遅延させて応答電波を出す、らしい。このモード4や、後述のモード5の暗号のセットに使うのがKIV-77やKIV-78 IFF暗号化アップリケ、なる謎の機械である。パンフレットなどはあるが、中身は当然最高機密のカタマリのようだ。

f:id:scienceasacandleinthedark:20200113132542p:plain

前述のF-15Aのコクピット左スロットル部分。スコークの設定やIFFのON/OFF、アンテナの切り替えボタンがある。軍用のモード4に関するスイッチも見える(同前)

さて、さすがにスコークと高度だけでは足りないので、軍民共モードSが1980年代に追加された。高度なパルス送信技術で色んなデータを送る…らしいのだが複雑なので詳細は省く。このシステムが空中衝突防止装置(TCAS)やADS-Bにも使われてる。さらにこのモードSを暗号化したものが軍用モード5である。米軍では2020年、つまり今年から本格的にモード5の運用を行うため、自衛隊NATO各国もそれに合わせてモード5対応のトランスポンダの導入が進んでいる。

モード1と2は古い規格のようで、モード1コクピットで設定する2桁5ビットのミッションコード*3で、モード2は基本的に飛行前に設定する機上変更不可の8進数4桁の機体番号だ。輸送機などでは機上で変更できることもあるとのこと。

だいたい調べたところではこんなところである。最期にF-2に搭載されているAN/APX-113(V) IFF質問・応答装置のカタログと、KIV-78 暗号化アップリケのカタログへのリンク、参考にしたWikipediaの記事を張っておく。

AN/APX-113(V) :

https://www.baesystems.com/en/download-en/20180518191818/1434555677018.pdf

KIV-78:

https://gdmissionsystems.com/-/media/General-Dynamics/Cyber-and-Electronic-Warfare-Systems/PDF/Brochures/cyber-kiv-78-iff-crypto-datasheet.ashx?la=en&hash=DB0D5556262A6A6624471FC9E24D2F77CF2744C0

Wikipedia

Identification friend or foe - Wikipedia

Aviation transponder interrogation modes - Wikipedia

Secondary surveillance radar - Wikipedia

米空軍国立博物館

McDonnell Douglas F-15A Eagle > National Museum of the United States Air Force™ > Display

*1:0000から7777までの4096通り。7500はハイジャック、7700は非常事態などに予約されている。たったこれだけでは足りないのでは、と不思議に思ってたが、管制空域で重複してなければよいので大丈夫ならしい。ちなみに重複する場合は管制から変更の指示が来るとのこと

*2:ちなみにこの鳥の鳴き声を示す"Squawk"という名称自体が、最初のIFFが"Parrot"(オウム)と言う名称であったことに因む

*3:上の左スロットル部分の写真でも、よく見るとM1 CODEの選択部分がある

MVNOを使っているSIMフリースマホでIPv6接続する方法

数日前、今さら(そう、2010年代もあと一ヶ月強の今さら!)IPv4枯渇についてTwitterが話題になっていた。発端となったのはヨーロッパでのIPv4が完全に枯渇し、割当が終了したというツイートである。

 日本を含むアジア太平洋地域は何年も前に割当が終了しているので関係はないのだが、話題とはだいたいそんなもんである。

さて、固定回線ではIPv6への以降がジワジワと進んでいるが、携帯回線、特にMVNOではどうなのかというのが本題である。結論的に言えば「ほとんどの場合IPv6が使えるが、デフォルトで設定されていないので使われてない」となる。

www.itmedia.co.jp

必要な情報は全て上のニュースで説明されているが、つまりAPNの設定を変更してIPv4とv6の両方を使うようにすればよい。下記説明する。

なお環境はAndroid 9.0、某社SIMフリースマホである。他バージョンやiPhoneでも多分似たような設定があるはずなので各位適当にトライして欲しい。また接続を確認したMVNOはDMM mobileとIIJ mioである。

まず、リモート診断君v6に接続して環境を確認してみる。"via IPv4"と表示されるはずだ。

リモート診断君v6 - IPv6対応ウェブ環境変数チェッカー

確認したならサクサク進めていこう。説明画像はアップロードが面倒なのでTwitterの呟きを利用する。

「設定」→「モバイルネットワーク」→「詳細設定」→「アクセスポイント名」→指定のAPNを選択→「APNプロトコル」と「APNローミングプロトコル」を「IPv4」から「IPv4/IPv6」に変更→「保存」

これでもう一度リモート診断君に繋ぎ直してみれば、"via IPv6"と表示されるはずだ。

言うまでもないがこれで得することは何もない。踊っているカメをみることができるぐらいである。あなたや私の人生と同程度の意味しかない。つまり無意味と言うことだが。

The KAME project

どのMVNOでは成功したか、しなかったかなどを適当に報告したり呟いてしてみてもいい。各位の健闘を祈る。

ETCのセキュリティを調べてみた(けどよく分からなかった)

かつて、「料金所渋滞」という概念が存在したらしい。

「これから話すことは、きみたちにはきっと信じられないことだろう」

いにしえのドライバーたちは笑いながら語る。

「しかし歴史を知らないと、過去の事実はたいてい信じられないことのように思えるのだよ」

つまり有料道路の料金所で、一台一台料金を現金で支払うことにより車両の流れが悪くなり、本線まで渋滞が生じるという現象が前世紀末~今世紀初頭まで起きてらしい。信じがたいことである。

さて現代では何故この言葉が死語となったのか、それはETCの使用が当然となったからだ。時速20kmまで減速しなければならないが、それでも一時停止、支払いというシーケンスが必要な手動決済よりははるかに効率が良い。

 

本題に入ろう。このETC、はっきりした年度は不明だが、遅くとも2030年頃までに古い車載器はセキュリティ上の理由から使用できなくなるとアナウンスがされている。

www.mlit.go.jp

いい機会なのでETCの(特に車載器の)セキュリティについて調べてみることにした。…が、結論から言うと守秘の壁が厚くて不明である、と言うことになる。

IPAの資料(末尾参照)や出典となった沖電気の資料によれば、車載器の基本構造は

    1. RFモジュール(送受信部)
    2. DSRC送受信信号処理部
    3. 課金情報処理部
    4. ヒューマンインターフェース部

f:id:scienceasacandleinthedark:20190907190506p:plain

 

となっている。問題のセキュリティは3の課金情報処理部、ICカードとデータをやりとりするSAM(Secure Application Module)が関連している。

…がしかし、このSAM、素性が全く分らない。耐タンパー性のある内容非公開のチップで、各車載器メーカは購入して使用しているとのことだが、製造メーカすら分らない。

それでは規格から攻めてみるか…と思いきや、こちらも完全にブロックされている。ETCシステムの管理運営を行う道路システム高度化推進機構(ORSC)とNDAを結ばない限り、規格書の類いは一切公開されないと言う。関係しそうな資料の目次だけはNEXCO総研のサイトでも見られるのだが。

www.ri-nexco.co.jp

と言うわけで内容を調べるのは諦める。が、何故変更となるのか、を推測することはある程度出来る。

日本でETCが一般に開放されたのが2001年3月。となると当時使われていた暗号アルゴリズムは公開鍵ならRSA-1024、共通鍵ならDES、ハッシュ関数MD5あたりと推測できる。これらは全て現代では安全とは見なされない…が、車載器のSAMチップに書き込まれているのであればアップデートは出来ない。そういうわけでどこかで更新が必要と判断されたのであろう。ではそれの判断はいつ頃か? ヒントとなりそうなのは車載器…特にETC2.0対応車載器の新旧セキュリティ見分け方である。

 

f:id:scienceasacandleinthedark:20190907192250p:plain

「旧」規格品には■マークが付けられて、「新」規格品ではそれはない。と言うことは、旧規格品を作ったときには既に新規格への移行を想定していたと考えるのが妥当だろう。ETC2.0は2009年に実験モニターが始まったらしい。また、当時は「暗号アルゴリズム2010年問題」というのも話題になってたはずである。となるとこの段階で新セキュリティ規格への移行を考え始めた、と考えられる。

 と言うわけで残念ながらすっきりしない結果に終わった。廃車から車載器を剥がしてこれればどれがくだんのSAMチップなのかわかるかもしれないが…さすがにそこまでする気力はないので誰かお願いします。

 

参考:

IPA 組込みシステムの脅威と対策に関するセキュリティ技術マップの調査報告書
「第9章ETC」
https://www.ipa.go.jp/files/000013819.pdf

ETC総合情報ポータルサイト 「ETCのセキュリティ規格の変更について」
https://www.go-etc.jp/support/pdf/security_standard.pdf

雑記:漫画「軍艦無駄話」を買った

www.hakusensha.co.jp

タイトルどおり。1年に3巻出る「楽園」と「楽園Web増刊」に連載されていた「軍艦無駄話」のコミック版である。

「楽園」は新感覚恋愛コミック(?)らしいがとにかく面白い作品が沢山あるのでオススメ。個人的に好きなのは久米田康治kashmir位置原光Zシギサワカヤpanpanya中村明日美子(敬称略)あたりである。

ちょうど夏のWeb増刊(試し読みではない)がリリースされているので、是非読んでみて欲しい。少し左下の「Web増刊へGo」というウサギのアイコンが入口である。

www.hakusensha.co.jp