[iOS] 鍵認証の導入!脱獄後の最低限のセキュリティ対策をしよう! [OpenSSH]

(37)

前回ユーザーパスワードの変更を行いました。
ただそれだけではOpenSSHをインストールするには心許ないです。
そこで、今回は鍵認証方式の導入を行いましょう。

iOSデバイスへのSSH接続を出来るようにするためにOpenSSHをCydiaからインストールしている人も多いかと思います。
私もファイルのバックアップ時やパーミッションの変更時などによくお世話になっています。

便利なOpenSSHですが、ちゃんと設定をしてあげないと他人にデバイスへ侵入されたり、ファイルを改変されたりしてしまう恐れがあります。
そんなことが起こる前に、安全に使用するための設定をしてあげましょう!

スポンサーリンク

鍵認証とはなんだ?

簡単に説明しますと、「鍵認証」という名前そのままでを持っていないとログイン出来ない。と言うことですね。
今回ですとiOSデバイス側に用意された鍵穴に合うを持っていて初めてログイン出来る様になります。

この鍵認証方式を使用することでパスワードのみでログイン出来ていたこれまでよりもずっとセキュリティレベルを高めることが出来ます。
パパは、安心です。

詳しく説明し出すと1記事で収まる気がしないのでガッツリと知りたい方は【公開鍵暗号 – Wikipedia】の方をご覧ください。

SSH接続とターミナル操作について

この設定をするためにはiOSへSSH接続して作業を行います。
ファイル操作とターミナル操作が必要になりますのでそれぞれ対応したアプリ、ソフトを使用します。

Windows
ファイル操作
WinSCP
ターミナル操作
PuTTY
Mac
ファイル操作
Cyberduck
ターミナル操作
ターミナル (Mac付属)

それぞれ私が使用している物ですので、ご自身が使いやすい物を使用して戴いて構いません。
また、それぞれの接続方法等はリンク先等を参照してください。

OpenSSH を インストール

鍵認証方式を導入するにはiOSデバイスへSSH接続する必要があります。
そこで「OpenSSH」をインストールするのですが、ここで絶対先にやるべき事があります。
それがパスワードの変更です。
必ず「OpenSSH」をインストールする前パスワードの変更を行ってください。
【[iOS] パスワードを変更!脱獄後の最低限のセキュリティ対策をしよう! [OpenSSH]】

パスワードの変更を行いましたら、iOSデバイスへCydiaからOpenSSHをインストールしましょう。
また、このときSBSettingsをインストールしてください。
トグルによるSSHのON/OFFが可能になります。
SSHを使用する時だけ「ON」にし、それ以外ではOFFにしておきましょう。

事前知識

ユーザー(アカウント) & 権限

iOSには主に2つのユーザー(アカウント)が設定されています。
mobilerootです。
このユーザーはそれぞれ持っている権限が異なり、アクセス出来る階層、ファイルに違いがあります。
簡単に説明すると以下の様な感じです。

mobile
制限された(許可された)階層、ファイルのみにアクセス出来る
root
全ての階層、ファイルにアクセスする事が出来る

文中に出現する[Enter]について

文中に出てくる[Enter]はキーボードのEnterの事です。
文字として入力するわけではありませんのでご注意ください。

mobile と root

上記でも記述したとおりiOSにはmobilerootがあります。
今回の手順では、どちらのユーザーで作成するかによってどちらのユーザーでログイン出来るかが決まります。

今回の記事ではrootで作成しています。
これはSSH接続でのファイル操作が必要な作業の時に「mobile」で作成しているとアクセス出来ないファイルが出てきて混乱してしまう可能性があるためです。
もし、権限等の意味が分かっているのであれば強くmobileでの作成をオススメします。

mobileで作成する場合は下記手順を読み替えて行ってください。

**root を mobileに読み替える
su root
su mobile

**/var/root/ を /var/mobile/に読み替える
/var/root/
/var/mobile/

**rootでのログインを禁止する
**sshd_config の編集
#PermitRootLogin yes
PermitRootLogin no

鍵認証の導入方法

Step 1:鍵の作成

  1. まずはターミナル操作です。
    PuTTY」や「ターミナル」でiOSへSSH接続してください。

    rootユーザーとしてログインします。
    su rootと入力し、設定したパスワードを入力します。

    su root[Enter]
    Password:設定したパスワード[Enter]

    pkeyc-1-02

  2. 鍵の作成に入ります。
    ssh-keygen -t rsaと入力します。

    ssh-keygen -t rsa[Enter]

    pkeyc-1-03

  3. Enter file in which to save the key (/var/root/.ssh/id_rsa):と表示されて止まりますので、何も入力せずそのままEnterを押します。

    Generating public/private rsa key pair.
    Enter file in which to save the key (/var/root/.ssh/id_rsa):[Enter](何も入力せずEnter)

    pkeyc-1-04

  4. 次はパスフレーズの設定です。
    要するにパスワードです。
    ユーザーパスワードとは違う物を設定するようにしてください。同じ物はセキュリティ的に弱くなる原因となります。
    好きなパスフレーズを入力し、Enterを押します。
    続いてパスフレーズの確認として先ほどと同じパスフレーズを入力し、Enterを押します。

    Created directory ‘/var/root/.ssh’.
    Enter passphrase (empty for no passphrase):任意のパスフレーズ[Enter]
    Enter same passphrase again:上記と同じパスフレーズ[Enter]

    (ちょっとして情報ですが、ここで何もパスフレーズを入力せずに進めると、パス無し鍵認証として設定する事も可能です)
    pkeyc-1-05

  5. これで少し待つと鍵の作成が完了します。

    Your identification has been saved in /var/root/.ssh/id_rsa.
    Your public key has been saved in /var/root/.ssh/id_rsa.pub.
    The key fingerprint is:
    **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** root@iPhone-4
    The key’s randomart image is:
    +–[ RSA 2048]—-+
    |         |
    |         |
    |         |
    |         |
    +ーーーーーーーーー+

    pkeyc-1-06

  6. 全文

    su root[Enter]
    Password:設定したパスワード[Enter]
    ssh-keygen -t rsa[Enter]
    Generating public/private rsa key pair.
    Enter file in which to save the key (/var/root/.ssh/id_rsa):[Enter](何も入力せずEnter)
    Created directory ‘/var/root/.ssh’.
    Enter passphrase (empty for no passphrase):任意のパスフレーズ[Enter]
    Enter same passphrase again:上記と同じパスフレーズ[Enter]
    Your identification has been saved in /var/root/.ssh/id_rsa.
    Your public key has been saved in /var/root/.ssh/id_rsa.pub.
    The key fingerprint is:
    **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** root@iPhone-4
    The key’s randomart image is:
    +–[ RSA 2048]—-+
    |         |
    |         |
    |         |
    |         |
    +ーーーーーーーーー+

Step 2:鍵の配置 & 権限設定

作成した鍵の配置、パーミッション(権限)などを設定していきます。

  1. 作成された鍵(鍵穴部分)を設置します。

    cat /var/root/.ssh/id_rsa.pub >> /var/root/.ssh/authorized_keys[Enter]

    pkeyc-1-07

  2. パーミッション(権限)を正しく設定します。
    これが正しくないと色々と困ったことになっちゃいますので確実に行います。

    chmod 700 /var/root/.ssh[Enter]
    chmod 600 /var/root/.ssh/authorized_keys[Enter]

    pkeyc-1-08

  3. 必要の無いファイルは削除してしまいましょう。

    rm /var/root/.ssh/id_rsa.pub[Enter]

    pkeyc-1-09

  4. 全文

    su root[Enter]
    Password:設定したパスワード[Enter]
    cat /var/root/.ssh/id_rsa.pub >> /var/root/.ssh/authorized_keys[Enter]
    chmod 700 /var/root/.ssh[Enter]
    chmod 600 /var/root/.ssh/authorized_keys[Enter]
    rm /var/root/.ssh/id_rsa.pub[Enter]

Step 3:鍵の転送

これで鍵の作成、iOSへの設置は完了しました。
続いて、この鍵が手元になければ接続できませんので鍵をPCへ転送しましょう。

  1. WinSCPCyberduck等でSSH接続します。
    この時点ではまだユーザーパスワードでのログインが可能です。
  2. /var/root/.ssh/フォルダ内にあるid_rsaをPCへ転送します。
    id_rsaがPC側で使用する鍵となります。
    自分がわかりやすく、間違って削除してしまうことのない場所へ保管してください。

    /var/root/.ssh/id_rsa

    pkeyc-1-10

Step 4:鍵認証方式の実装

さて、鍵の作成もPC側への転送も全て終わりました。
これで鍵認証方式を実装するための準備は全て完了です。
さっそく現在のユーザーパスワードでのログインから鍵認証方式のログインへ変更していきましょう!

変更は/etc/ssh/sshd_configの内容をちょこっと書き換えます。
バックアップをちゃんと取っておきましょう。

  1. /etc/ssh/フォルダ内のsshd_configをPC、母艦へコピーします。
    続いて、コピー元であるiOS側の「sshd_config」をリネームして、バックアップを取ります。
    sshd_config.bakとでもリネームしておきましょう。「.bak」がバックアップであると示しているのでわかりやすいかと思います。

    /etc/ssh/sshd_config

    pkeyc-1-11

  2. PC、母艦へコピーしたsshd_configを編集していきます。
    sshd_configをテキストエディタ(メモ帳 等)で開きます。
    ここから編集していきますが、記事中に出てくる行数は個人差がある場合がありますので、編集部分を探す時の参考程度にしてみてください。
    pkeyc-1-12
  3. HostKey /etc/ssh/ssh_host_keyの先頭に# (シャープ)をつけてコメントアウトします。
    23
    24
    25
    
    ↓
    
    23
    24
    25
    # HostKey for protocol version 1
    HostKey /etc/ssh/ssh_host_key
    # HostKeys for protocol version 2
    
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    
    # HostKey for protocol version 1
    #HostKey /etc/ssh/ssh_host_key
    # HostKeys for protocol version 2

    pkeyc-1-13

  4. #PubkeyAuthentication yes
    #AuthorizedKeysFile .ssh/authorized_keys

    この2行の先頭に付いている# (シャープ)を削除し、コメント解除します。
    この設定をすることで鍵認証を使用するように設定されます。

    45
    46
    47
    
    ↓
    
    45
    46
    47
    #RSAAuthentication yes
    #PubkeyAuthentication yes
    #AuthorizedKeysFile	.ssh/authorized_keys
    
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    
    #RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile	.ssh/authorized_keys

    pkeyc-1-14

  5. パスワード認証が有効のままでは意味がないので、パスワード認証でのログインが出来ないようにします。
    #PasswordAuthentication yesの先頭に付いている# (シャープ)を削除し、最後に書いてあるyesnoへ変更します。

    59
    60
    61
    
    ↓
    
    59
    60
    61
    # To disable tunneled clear text passwords, change to no here!
    #PasswordAuthentication yes
    #PermitEmptyPasswords no
    
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    
    # To disable tunneled clear text passwords, change to no here!
    PasswordAuthentication no
    #PermitEmptyPasswords no

    pkeyc-1-15

  6. 編集はこれで完了です。
    編集完了したsshd_config/etc/ssh/フォルダ内に転送してください。
    また、転送後はパーミッションを確認してください。

    /etc/ssh/sshd_config

    グループ:wheel [0]
    所有者:root [0]
    パーミッション:644

    pkeyc-1-16

  7. これでiOS側の設定は全て完了です!
    設定を反映させるためにiOSデバイスを再起動しましょう。

クライアント側の鍵認証ログイン方法

さて、鍵の用意もできたのでクライアント側で鍵ファイルを選択して、鍵認証でのログインを出来る様にしましょう。

Windows:WinSCP & PuTTY

作成された鍵ファイル(id_rsa)をWinSCPで選択したいのですが、WinSCPでは鍵ファイルをそのままでは読み込めません。
そこで、読み込める形式に変換をします。

  1. 変換するためにはPuTTYgenというソフトが必要です。ダウンロードしましょう。
    ダウンロード:☆ PuTTYgen ☆
    上記リンク先のPuTTYgen: puttygen.exe部分からダウンロードしてください。
    ht-winscp1_10
  2. puttygen.exeを起動します。
    画面右上FileメニューからLoad private keyを選択します。
    ht-winscp1_11
  3. iOSデバイスから転送したid_rsa(鍵ファイル)を選択します。
    ht-winscp1_12
  4. なにやら出ますがOKをクリックします。
    続いて、画面右下Save private keyをクリックします。
    ht-winscp1_13ht-winscp1_14
  5. 自身のわかりやすく、間違えて削除しないフォルダへ保存してください。
    また、保存時の名前は分かりやすくid_rsa.ppkあたりにしておきましょう。
    ht-winscp1_15

これで鍵の変換は完了です。
WinSCPでも読み込める形式になりました。
秘密鍵の部分で変換した鍵ファイル(id_rsa.ppk)を選択しましょう
ht-winscp1_16

ホスト名
iOSデバイスのIPアドレス
ユーザ名
root もしくは mobile
パスワード
未入力
秘密鍵
鍵ファイル(id_rsa.ppk)を選択
プロトコル
SFTP

これらを記入し、ログインもしくは保存です。
もっと詳しく知りたい場合は詳しく記した専用の記事がありますので、そちらをご参照ください。
【WinSCP – iOSとSSH接続でファイルを送受信 [Windows,JBApp]】

Mac:Cyberduck

パスワードでのログイン方法とほぼ同じです。
新規接続もしくは既存の接続設定から鍵を選択してあげるだけです。
pkeyc-1-17

接続方法
SFTP (SSH による暗号化 FTP)
サーバ
iOSデバイスのIPアドレス
ユーザー名
root
パスワード
未記入
公開鍵認証を使用する
チェックを付け、先ほど母艦へ転送した鍵ファイル(id_rsa)を選択

これで鍵認証でのログインが出来ます。

Mac:ターミナル

ターミナルからはパスワード使用していたときとほぼ同じログイン方法ですが、オプションに先ほど母艦へ転送した鍵ファイル(id_rsa)の場所を指定してあげます。
-i 鍵の場所で指定することが出来ます。

ssh root@IPアドレス -i 鍵の場所
例:ssh root@192.168.1.12 -i /Users/SANTA/id_rsa

pkeyc-1-18

また、このオプションを省略した場合は/Users/ユーザー名/.ssh/id_rsaが自動で指定されます。
ここに鍵を置いておけばオプション省略でログインも可能です。

コメント

  1. こんにちは、
    ipod touch iOS5.1.1脱獄後、OpenSSHを入れてからは、鍵認証の導入はできないのでしょうか??
    Macのterminalで鍵認証の導入作業をしているのですが、パスワードが認識されません。
    mobile terminalに使用したパスワードを入れたのですが…。su: Sorryとなり、初めからやり直しになります。

    • OpenSSHインストール後であっても可能です。

      きちんとTerminalからSSH接続がされた状態で行われておりますでしょうか?
      Macのsuコマンドが実行されている状態になっておりませんでしょうか?

  2. 返信ありがとうございます。

    私の勘違いでした。OpenSSHを入れているのではなく、TinyUmbrellaでのSHSH取得と取り違えていました。なので、OpenSSHの取得はまだです。

    仮にMacのsuコマンドが実行されているとしたら、どのようにMacでのterminal suコマンドが実行していない状態にするのでしょうか?
    よろしくお願いします。

    • iOSデバイス側でOpenSSHをインストールし、MacのターミナルからOpenSSH接続を行ってください。
      SSH接続によるログインが完了している状態であればsuコマンドを実行 = iOS側で実行されるということになります。

  3. こんにちは、質問です
    opensshを入れてないデバイスでもセキュリティを重視するならやっておいた方がいいですか?

    • 鍵認証に関してはOpenSSHが入っていないならば、行わなくてもそこまで心配になる必要は無いと思います。
      ただ、パスワードの変更に関してはやっておくと安心ですね!
      https://tools4hack.santalab.me/user-password-change-ssh.html

      • 返事ありがとうございます。
        パスワード変更の記事はとてもわかりやすくて初心者の自分でもおかげさまで、変更できました。

        これからもがんばってください。

  4. 多分選ぶキーを間違えてしまい、
    ログインできない上に
    キーもどこかで失敗していたようで
    puttygenで変換することもできません。

    SSHは諦めるしかないんでしょうか?

    • どの部分で間違えてしまったのか等は把握されてますでしょうか?

      • 返信ありがとうございます。

        Step3までは出来ていると思います。

        バックアップの方法がわからなくてあやふやですが。

        iOSインストールし直してもう一度脱獄したら治りますか?

        • はい、iOSの復元を行われた段階でリセットされます。

      • 先ほどのコメントに付け足しです。
        puttygenでは変換できないのではなく、
        表示されないです。

  5. ありがとうございます
    リセットしました^^

  6. いつもわかりやすい記事ありがとうこざいます。

    セキュリティに関する質問です。
    脱獄してから3ヶ月ほど経つのですが、最近急に出会い系からの迷惑メールが届くようになりました。
    もともと迷惑メール対策として、自分のメールアドレスは長くしていて、脱獄する前からこのようなメールが届くことは一切ありませんでした。

    やはり脱獄が原因と考えられるでしょうか。
    (脱獄後この記事を参考にさせて頂き、mobileとrootのパスワードは変更しました。)

    • 通常で考えますと脱獄自体と迷惑メールが増えたと言う事の関連性は薄いと思われます。

  7. こんばんわ
    いつもわかりやすい記事ありがとうございます。
    Step 4:鍵認証方式の実装
    でつまづいてしまいました。

    /etc/ssh/sshd_config
    バックアップまではわかったのですが

    sshd_configの内容を編集しようと思ったのですが
    記事の内容と違ってて困りましたので教えてもらえないでしょうか?

    Step 4:鍵認証方式の実装の
    3.HostKey /etc/ssh/ssh_host_keyの先頭に# (シャープ)をつけてコメントアウトします。

    内容を検索しても
    HostKey /etc/ssh/ssh_host_key
    の行がでてこないです。

    私のiPhone3GSと内容が違いまして
    どうすればいいのかわからないので
    よろしくお願いします。

  8. Mobile Terminaiをインスコしたとき一緒にCore Utilitiesも同時にインスコされたのですが、これはなんなのでしょうか。ちなみにCore Utilities(/bin)というTweakはすでに存在してましたが、これとの違いはなんなのかもしご存じでしたらお願いします。

    また、関係ないかもしれませんが、OpenSSLというTweakは入っていますが、OpneSSHははいっていません。したがって鍵認証の導入まではしなくていいのでしょうか。

    • 単体で何かをするという物ではなく、いろいろな機能の間を受け持ってくれるユーティリティとイメージしていただければ良いかと思います。

      OpenSSLとOpenSSHは名前が似ているのでよく違いが分からなくなりがちなのですが、機能としては全く別の物になります。
      鍵認証についてはSSHが入っていないのであれば絶対に必要という物ではありません。

  9. 「iOSデバイスへのSSH接続を出来るようにするためにOpenSSHをCydiaからインストールしている人も多いかと思います。」
    このSSH接続とは具体的にどういったことなのでしょうか。

    もしかしたら関連することかもしれませんが、iFunBoxを2.1にアップデートした際、WiFi接続が可能になったはずなのですが、自分の場合Eneable WiFi Connectionにチェックをいれているのですが、認識されません。ちなみにOpenSSHはインストールしていません。(Windows7 iOS5.1.1)

    そこで質問なのですが、OpenSSHをインストールすれば、WiFi接続が可能になるのですか?
    また、WiFi経由でファイルの編集等を行う場合、こちらに掲載されている鍵認証方式を導入すれば、セキュリティ上問題ないのでしょうか。
    できればこの3点ご回答お願いいたします。

    • 1)ネットワークを介して別のデバイス・コンピューターにログイン・アクセスする仕組みといったイメージの物になります。
      ターミナルによってコマンド操作も行えますので、ここら辺を使う場合は必須になっています。

      2)使用するにはSSHは必要ありません。またSSHをインストールしなければ鍵認証までは必要ありません。

      iFunBoxを起動した状態でWi-Fi同期をオンにしてあげてください。

      • ありがとうございます。とてもよくわかりました。
        おかげさまで、iTunesの「WiFi経由でこのiPhoneと同期」にチェックをいれたら認識してくれました。ありがとうございます。

  10. いつもわかりやすい記事ありがとうございます。
    ios6.1で鍵認証できました

  11. 公開鍵と秘密鍵の作成はでき、PCとのSSH接続もできたのですが、authorized_keysというものがiphoneに残されたままなのですが、これは何なのでしょうか? 秘密鍵かもしくは公開鍵なのでしょうか?

    • 元のファイルはid_rsa.pubですので、公開鍵となります。

  12. 出来たと思うのですがターミナルでログインする時に最初はssh root@IPアドレス -i 鍵の場所+パスフレーズでのログインになるのですがmacを再起動するまではssh root@IPアドレスだけでiphoneにログインできてしまいます
    試しにid_rsaをゴミ箱に入れてからターミナルでssh root@IPアドレスとしてもiphoneにログイン出来てしまいました
    これは普通のことでしょうかどこか間違いをしてしまったのでしょうか

    また2台目のiphoneを同じmacに鍵認証導入するときはどのようにすればよいでしょうか
    どうぞよろしくお願い致します。

    • Ipアドレス変えればいいです。

  13. いつもありがたく読ませていただいてます。

    rootで鍵認証を設定した場合、mobileのセキュリティはどうなっているのでしょうか?
    mobileでの外部からのアクセスを許してしまわないでしょうか?

  14. 鍵を無くしてしまった場合、復元するしか無いのですか?

  15. 間違えて rm /var/root/.ssh/authorized_keys としてしまいました…どうすればいいですか?

  16. Step3までは理解できたんですが、Step4の母艦って何ですか?

    • PC側という意味になります。

  17. SANTAさん、こんにちは。
    私は複数のiOS機器持ってるんで、母艦で鍵ペアを作成して、公開鍵を各機器に設定する方法もできると思うのですが、知識がついて行ってません(^◇^;)
    できれば、こちらの方法も公開お願いしますm(__)m

  18. WinSCPで、.sshのファイルが見えないのですがなぜでしょうか。iFileだと見れます。iFunBoxでPCに移してもいいのでしょうか。お願いします

    • 隠しファイルを表示する設定にしてみてください。
      また、iFunBoxを使用していただいても大丈夫です

  19. 今更昔の記事にコメントしてもあれかもしれませんが…
    完全に秘匿された通信路での秘密鍵の転送、とは言え秘密鍵を外部に持ち出すのはまずいかと思います。
    公開鍵が他人に漏れても特に影響はありませんし、PC側で作成し、公開鍵をiPhoneに転送する方が安全かと思われます。

  20. 恐れ入ります。いま四苦八苦しながら公開鍵の設置に取り組んでいます。
    3.HostKey /etc/ssh/ssh_host_keyの先頭に# (シャープ)をつけてコメントアウトします。
    # HostKey for protocol version 1
    HostKey /etc/ssh/ssh_host_key
    # HostKeys for protocol version 2
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    # HostKey for protocol version 1
    #HostKey /etc/ssh/ssh_host_key
    # HostKeys for protocol version 2
    の部分ですが、自分のiPhoneXの場合該当する行がなく、似た行で以下のようになっています。

    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    #HostKey /etc/ssh/ssh_host_ecdsa_key
    #HostKey /etc/ssh/ssh_host_ed25519_key

    この場合ですと、
    #HostKey /etc/ssh/ssh_host_rsa_key
    #HostKey /etc/ssh/ssh_host_dsa_key
    に変更するということでよろしいのでしょうか。

  21. 自己解決しました。
    #HostKey /etc/ssh/ssh_host_rsa_key
    #HostKey /etc/ssh/ssh_host_dsa_key
    で試しましたが問題ありません。