web-dev-qa-db-ja.com

`curl`コマンドでパスワードを送信するのは安全ではありませんか?

GitHub APIに対して行うことができるリクエストの例を以下に示します。

curl 'https://api.github.com/authorizations' --user "USERNAME"

これにより、アカウントのパスワードの入力を求められ、続行します。

Enter Host password for user 'USERNAME':

プロンプトを表示したくない場合は、ユーザー名と同時にパスワードを指定できます。

curl 'https://api.github.com/authorizations' --user "USERNAME:PASSWORD"

しかし、この方法は安全性が低いですか? curlはすべてのデータを一度に送信しますか、それとも最初に安全な接続をセットアップしてからUSERNAMEPASSWORDを送信しますか?

35
user137369

接続に関しては違いはありません。TLSが最初にネゴシエートされ、HTTP要求はTLSによって保護されます。

ローカルでは、これは安全性が低い可能性があります。

  • パスワードはコマンド履歴に保存されます(~/.bash_history)コマンドの一部として。 注:これは、コマンドを実行する前にコマンドの前にスペースを追加することで回避できます(変数にignorespaceの設定がある場合) HISTCONTROL )。
  • 共有システムでは、通常、pstopなどで、または/proc/$pid/cmdline、コマンドが実行されている限り。
  • セキュリティで保護されていないパスワードをスクリプトに保存すると、スクリプト自体の保存場所によっては、セキュリティ上のリスクが生じる可能性があります。
73
Esa Jokinen

しかし、この方法は安全性が低いですか?

いいえ、httpsを使用する場合はそうではありません。 HTTPSを使用すると、トランザクション全体が暗号化されます。しかし、@ Esaが言及したように、ローカルで安全ではないため、コマンドの前にspaceを追加しないで、コマンドがコマンド履歴に含まれないようにすることができます。他のユーザーにpsコマンドを公開することを心配している場合は、/procを強化することで解決できます。リンクに従って hidepid を有効にします。

curlはすべてのデータを一度に送信しますか、それとも最初に安全な接続を設定してからUSERNAMEPASSWORDを送信しますか?

いいえcurlが一度にすべてのデータを送信するわけではありません。他のSSL/TLS接続と同様に、curlはデータを渡す前にSSLハンドシェイクを開始します。

次のように、tcpdumptshark、またはWiresharkを使用してデータがどのように転送されるかを検査できます(tcpdump/tsharkを実行した後、curlコマンドを実行します)

[〜#〜] tcpdump [〜#〜]

[root@arif]# tcpdump -i eth0 -n src Host 192.168.1.1 and dst Host 192.168.1.2 and port 443 -XX

どこ、

  • -i:この場合はeth0である特定のインターフェースでリッスンします
  • src Host:ソースipアドレスの指定
  • dst Host:宛先ipアドレスの指定
  • portSSL接続のデフォルトであるポート443を指定します。必要に応じて変更できます。
  • XX:ヘッダー、パケットコンテンツ、リンクレベルヘッダーをHEXおよびASCIIで表示します。

いくつかのパケットの後、gibberishの内容が表示され始めます。次のコマンドを使用して、パケットからパスワードをgrepすることもできます。

[root@arif]# tcpdump -li eth0 -n src Host 192.168.1.1 and dst Host 192.168.1.2 and port 443 -XX | grep 'password'

パスワードが表示された場合、送信前にパスワードが暗号化されていません。それ以外の場合は、大丈夫です。

[〜#〜] tshark [〜#〜]

[root@arif]# tshark -O tls "ip src 192.168.1.1 and ip dst 192.168.1.2" -x

どこ、

  • -O:プロトコルについて。
  • -x:パケットの内容を確認します。

上記のコマンドでもパスワードをgrepできます。

8
Muhammad

ローカルユーザーから保護する最善の方法は、「。netrc」ファイルを使用することです。 curlのmanページには、その使用方法の詳細が記載されているはずです。

3
sitaram