« 長官ゆうすけ | Main | 今年は何も考えてませんでした »
iPod touch は一種の PDA としてかなり使える。かなり使えるということは個人情報その他満載で、場合によっては踏み台にされたりする可能性もあるということだ。
そこで iPod touch にやっておきたいセキュリティ設定についてまとめておく。
まず最初に、iPod touch を純正のまま使用していようが JailBreak していようが共通してやっておくべきことです。
[設定]-[一般]-[パスコードロック] で設定する四つの数字による暗証番号の設定です。パスコードをオンにして、[パスコードを要求]を[今すぐ]に設定します。
これによって起動されるとき、ロックが解除されるとき必ずパスコードを入力する画面になり、正しいパスコードを入れないと操作できないようになります。
[設定]-[一般]-[自動ロック] で設定する iPod touch が操作されていない時間がどれだけ続いたら自動的にロックされるかという設定です。[しない] 以外の値を設定します。
これによって動画(YouTube も含む)を見ているときを除いて、一定時間 iPod touch が操作されていないと iPod touch はロック状態になります。
iPod touch にはプライバシー情報など秘匿すべき情報が満載です。もし上の設定をしないで iPod touch を紛失したり盗難されたらどうなるでしょうか。自分も含め家族親戚、友人、仕事上の関係者などの住所氏名電話番号、そしてメールアドレスなどの連絡情報が流出します。メールが勝手に閲覧されたり削除されたり、あなた名義でメールを出されたりします。Safari が記憶した閲覧履歴ならまだよいですが、ログインが必要な web サービスにログインされ、あなた名義でさまざまなことがされるでしょう。もし、オンラインバンクなどがあれば事態は深刻です。
上の二項目を実施することで、これらのリスクを回避はできませんが緩和することができます。
パスコードを知らずにパスコードを解除するには平均 5,000 回の試行をすれば解除できます。平均で 90 分も試行し続ければ、最大で 3 時間試行し続ければパスコードは解除できます。もし盗難者があなたの iPod touch に含まれる情報に価値があると考えているのであればそれくらいはやってしまうでしょう。それでもやらないよりは遥かに安全です。
一番よいのは iPod touch を無くさず、そして信頼できない人がいるところでは放置しないことです。そして Safari などの脆弱性を突かれないように普段のブラウジングに気を配りましょう。
OpenSSH は暗号化されたネットワーク接続を用いて、iPod touch と外部と相互に「ログイン」したり、ファイル送受信をするためのパッケージです。これによって、パソコンから iPod touch にログインして iPod touch を操作したり、iPod touch とパソコンとの間でファイル交換ができるようになります。
いくら暗号化されて覗き見られない接続だからと言ってもデフォルトのままでは脆弱です。以下をやる必要があります。
iPod touch に接続するパソコン上で OpenSSH で使用する秘密鍵ファイルと公開鍵ファイルを作成し、公開鍵を iPod touch に登録します。詳しくは後述します。
iPod touch 上で OpenSSH による接続を受け付けるプログラム sshd の設定でパスワードによるログインを禁止して、正当な秘密鍵ファイル所有者からのログインでなければ受け付けないようにします。詳しくは後述します。
後述のパスワードの変更を行ったとしても、ネットワーク越しのパスワードの総当たり攻撃を受けたら破られてしまうかもしれません。これらの設定によってパスワード総当たり攻撃を完全にシャットアウトしてあなた以外は iPod touch にネットワーク経由でアクセスできないようになります。これはパスワード認証より遥かに堅牢です。
この設定は何も iPod touch にだけすればよいというものではありません。OpenSSH が使われている全てのマシンで行うべきことです。それは例えば普通の Mac OS X です。
ターミナルアプリをインストールしたり、iPod touch 上のアカウントとそのパスワードを用いてネットワーク経由で iPod touch に接続するためのものをインストールしたのなら必ずやるべきことがあります。
UNIX 系の OS でパスワードを変更するのは passwd コマンドですが、passwd コマンドを絶対に使ってはいけません。うっかり使ってしまったたら、その iPod touch は復旧不可能な事態になる恐れがあります。(参照「僕は見ていた : touch me tender」)
具体的な方法は後述しますが、後述の方法では OpenSSH をインストールしておく必要があります。他のソフトウェアのためだけにこれを行い、OpenSSH をインストールしておきたくない場合でも、一時的に OpenSSH をインストールして行ってください。
iPod touch のアカウント(root と mobile)のパスワードは初期状態ではどの iPod touch も同じパスワードになっています。したがってそのパスワードを知っている人ならば誰でもターミナルで操作できたり、ssh や sftp でネットワーク越しに操作ができてしまいます。
以下の説明では、パスワードを設定するときに、間違って設定を破壊しても復旧できるように OpenSSH でログインしておいて行います。説明には入れていませんが、逆に OpenSSH でのログインを鍵認証に限定するときも間違って設定を破壊したときに備えて、iPod touch 上のターミナルアプリからログインできる状態にしておくとよいでしょう。
お互いがお互いに依存した操作になっているように見えます。どちらからやればよいのでしょうか。
両方行うのであれば実はどちらでも大差ありません。
敢えて順序を付けるのでしたら、私は鍵認証への限定から行うことをお薦めします。なぜなら OpenSSH によるリモートからのログインはたとえあなたが iPod touch を手にして操作している最中でもあなたに知られずに試行することができますが、ターミナルアプリによるログインは iPod touch が他人の手に渡って更にパスコードロックが破られたときにのみ試行することができるからです。
つまり安全性への優先順位は鍵認証への限定の方が高いと考えるからです。リスクを考えるには発生しやすさも考慮する必要があるので、本当にどちらが優先されるべきかは熟考が必要ですが、なんとなく程度にそう思っていると考えてくださいね。以下の操作説明はこの順序で行うという仮定をベースにしています。
ssh や sftp あるいは scp を行うときにパスワード認証ではなく鍵認証を使用するようにします。そのためにはまず秘密鍵ファイルと公開鍵ファイルを作成します。秘密鍵ファイルと公開鍵ファイルのペアは使い回しができます。以前、秘密鍵ファイルと公開鍵ファイルを作成したことがある人はそれを使ってください。ステップ 1, 2 は不要です。
秘密鍵ファイルの正当な利用者であることを示すためのパスフレーズ(パスワードのようなもの)を決めます。iPod touch のパスワードは 8 文字以内でしたがパスフレーズにはそういう制限はありません。覚えやすく推測されにくいものを考えて用意しておいてください。
次のようにします。
ssh-keygen -t rsa
パスフレーズが訊ねられるので先程決めたパスフレーズを入力してください。私は以前作成したのを使い回していて、実際にどう訊ねられるのかとか他のことを訊ねられるかどうかは忘れてしまいました。
これは ssh プロトコル第 2 版用の RSA という種類の鍵ファイルを作るためのコマンドラインです。この結果ホームの直下の隠しフォルダ .ssh に id_rsa と id_rsa.pub というファイルが生成されます。この id_rsa が秘密鍵ファイルで id_rsa.pub が公開鍵ファイルです。秘密鍵ファイルは絶対に他人に渡してはなりません。
作成した公開鍵ファイル id_rsa.pub を iPod touch にコピーします。ただしファイル名は変更します。Mac OS X または UNIX 系の OS では次のように行います。
sftp root@{IP アドレス}
{IP アドレス} の部分は iPod touch の IP アドレスです。これは iPod touch で [設定]-[Wi-Fi]-[チェックが入っているワイヤレスネットワークの右の > ボタン]-[IPアドレス] で調べることができます。
パスワードが訊かれるので iPod touch の root のパスワードを入力して改行してください。入力したパスワードは表示されません。
mkdir .ssh
iPod touch の root のホームディレクトリの直下に .ssh ディレクトリを作成します。
chmod 0700 .ssh
その .ssh ディレクトリを root 以外は全く参照できないようにします。
lcd .ssh
手元のマシンの現在のディレクトリをホームディレクトリの直下の .ssh に変更します。
cd .ssh
iPod touch の現在のディレクトリをホームディレクトリの直下の .ssh に変更します。
put id_rsa.pub authorized_keys
公開鍵ファイルを iPod touch にログインするときの認証鍵として登録します。
chmod 0600 authorized_keys
認証鍵ファイル(元は公開鍵ファイル)を iPod touch 上の root 以外読み書きできないようにします。
exit
sftp を終了させます。
その設定ファイルは /etc/sshd_config です。これを次のようにして取得します。
scp root@{IP アドレス}:/etc/sshd_config ~/Desktop/
{IP アドレス} の部分は iPod touch の IP アドレスです。
sshd_config のオリジナルを iPod touch に保存しておく。
何か間違えたときに備えて sshd_config のオリジナルを次のようにして待避させておきます。
scp ~/Desktop/sshd_config root@{IP アドレス}:/etc/sshd_config.org
{IP アドレス} の部分は iPod touch の IP アドレスです。
sshd_config を書き換える。
手元の sshd_config を次の要領で書き換えます。
#RSAAuthentication yes#PubkeyAuthentication yes#AuthorizedKeysFile .ssh/authorized_keys
RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys
#PasswordAuthentication yes#PermitEmptyPasswords no
PasswordAuthentication noPermitEmptyPasswords no
これも改行は LF で保存してください。
/etc/sshd_config を更新する。
編集した sshd_config で iPod touch の /etc/sshd_config を更新します。
scp ~/Desktop/sshd_config root@{IP アドレス}:/etc/
{IP アドレス} の部分は iPod touch の IP アドレスです。
iPod touch では passwd コマンドを使ってパスワードを変更してはいけないので、それがすることを手動で行う必要があります。
また、ここでは iPod touch の OS (BSD Unix) のエディタ vi は使えないものとして説明します。vi は GUI エディタではないので操作系統が GUI エディタと全く異なります。使い方がよくわからない人が圧倒的に多いと思うからです。これに代わって手元のパソコンで設定ファイルを編集するために iPod touch に OpenSSH がインストールされている必要があります。
まず新しいパスワードを考えてください。そのパスワードは ASCII 文字で 8 文字までの長さにしてください。小文字だけでなく大文字を入れたり数字を入れたり記号を入れたりするとより破られにくいパスワードになります。8 文字以上は無視されます。
これは root アカウント用と mobile アカウント用に二つ用意しておいてください。
暗号化されたパスワードを生成には Perl の crypt 関数を使います。Mac OS X では Perl は元々入っています。ターミナルを起動してそのウィンドウに次のように入力して改行してください。これは root アカウント用と mobile アカウント用の二回行います。
perl -e "print crypt('{パスワード}', '{salt}'),\"\n\""
{パスワード} の部分は上で決めたパスワードが入ります。{salt} の部分は任意の二文字(ASCII 文字)です。これはちょっと知っている人が見れば暗号化後もわかってしまうものなので本当になんでもよいです。例えば iPod touch で初期状態で使用されているのは /s ですからそれを踏襲してもよいでしょう。踏襲しなくてもよいです。
例えばパスワードが 1a2B3c4D だとして次のようにします。
perl -e "print crypt('1a2B3c4D', '/s'),\"\n\""
この場合は /s5LE5yduW9z. が結果になります。
Windows では Perl はインストールしないと使えません。Active Perl で検索してみてください。
/etc/passwd と /etc/master.passwd を取得する。
sftp や scp を用いて iPod touch から /etc/passwd と /etc/master.passwd という二つのファイルを手元のパソコンにコピーしてください。私は sftp や scp を GUI アプリで行わないのでどんなソフトがあるか知りません。私と同じように Mac OS X でターミナルで行うには次のようにします。デスクトップにコピーされます。
scp root@{IP アドレス}:/etc/passwd ~/Desktop/scp root@{IP アドレス}:/etc/master.passwd ~/Desktop/
{IP アドレス} の部分は iPod touch の IP アドレスです。これは iPod touch で [設定]-[Wi-Fi]-[チェックが入っているワイヤレスネットワークの右の > ボタン]-[IPアドレス] で調べることができます。
最初のコマンドを実行すると恐らく何やら英語で確認も求められるでしょう。それは初めて OpenSSH による接続をするマシンが本物かどうかユーザに確認するものです。iPod touch に割り当てられた IP アドレスとターミナルに入力した IP アドレスが同じかどうか確認した上で yes とタイプして改行してください。そして、上の二つのコマンドはどちらもパスワードが訊かれます。iPod touch の初期状態の(あるいは前回設定した)パスワードをタイプして改行してください。
例えば iPod touch に割り当てられた IP アドレスが 192.168.0.3 だとすると次のようにします。
scp root@192.168.0.3:/etc/passwd ~/Desktop/scp root@192.168.0.3:/etc/master.passwd ~/Desktop/
/etc/passwd と /etc/master.passwd のオリジナルを iPod touch にも保存しておく。
/etc/passwd と /etc/master.passwd が壊れると二度と iPod touch を復旧させることができない事態になるかもしれません(参照「僕は見ていた : touch me tender」)。そのときに備えてオリジナルのファイルを iPod touch 上に保存しておきます。
scp ~/Desktop/master.passwd root@{IP アドレス}:/etc/master.passwd.orgscp ~/Desktop/passwd root@{IP アドレス}:/etc/passwd.org
{IP アドレス} の部分は iPod touch の IP アドレスです。どちらのコマンドラインもパスワードが訊かれるので iPod touch の初期状態の(あるいは前回設定した)パスワードをタイプして改行してください。
/etc/passwd と /etc/master.passwd を壊してしまった場合に備えて iPod touch にログインしておきます。Mac OS X からはテーミナルで次のようにしておきます。
ssh root@{IP アドレス}
{IP アドレス} の部分は iPod touch の IP アドレスです。既に鍵認証に限定しているときはパスフレーズが訊かれるので、あなたの秘密鍵のパスフレーズをタイプして改行してください。そうでないときはパスワードが訊かれるので iPod touch の初期状態の(あるいは前回設定した)パスワードをタイプして改行してください。
master.passwd ファイルを編集する。
iPod touch の /etc/master.passwd をコピーした master.passwd をテキストエディタで開いて次の要領で編集してください。
root:/smx7MYTQIi2M:0:0::0:0:System Administrator:/var/root:/bin/shmobile:/smx7MYTQIi2M:501:501::0:0:Mobile User:/var/mobile:/bin/sh
root:{暗号化されたパスワード}:0:0::0:0:System Administrator:/var/root:/bin/shmobile:{暗号化されたパスワード}:501:501::0:0:Mobile User:/var/mobile:/bin/sh
{暗号化されたパスワード} の部分は、上で Perl を使って暗号化したパスワードが入ります。root で始まる行の {暗号化されたパスワード} に root アカウントのパスワードを暗号化したもの、mobile で始まる行の {暗号化されたパスワード} に mobile アカウントのパスワードを暗号化したものを入れてください。
改行は LF で保存してください。
/etc/master.passwd を更新する。
編集済みの master.passwd を使って iPod touch の /etc/master.passwd を更新を更新します。Mac OS X のターミナルでは次のようにします。
scp ~/Desktop/master.passwd root@{IP アドレス}:/etc/
{IP アドレス} の部分は iPod touch の IP アドレスです。パスワードが訊かれるので iPod touch の初期状態の(あるいは前回設定した)パスワードをタイプして改行してください。
結果を確認します。iPod のターミナルアプリを起動してください。passwd: と表示されます。これに対し root のパスワードを入力して改行してください。入力は表示されません。
その結果 # という文字列(コマンドプロンプトという)が表示されれば成功です。打ち間違えたときは login: と表示されます。これに対し、root とタイプして改行し、もう一度パスワードを入力して改行してください。バックスペースはそれを表す制御文字として入力されるようです。
何度やってもコマンドプロンプトにならないときは、暗号化されたパスワードと入力したパスワードが一致していません。暗合されたパスワードを作るところからやり直してください。
もし /etc/master.passwd を壊してしまったときは iPod touch の表示が何度も際限なく再起動され始めます。そういうときは復旧用に ssh でログインしてあるターミナル上で次を行います。
cd /etccp passwd.org passwdcp master.passwd.org master.passwd