SCP(Secure Copy Protocol)とは?仕組み・コマンド例・SFTPとの違い・脆弱性まで徹底解説|サイバーセキュリティ.com

SCP(Secure Copy Protocol)とは?仕組み・コマンド例・SFTPとの違い・脆弱性まで徹底解説



「サーバーへのファイル転送をどうやって安全に行えばいいの?」「SCPとSFTPってどう違うの?」——ファイル転送のセキュリティについて調べているIT担当者からよく聞かれる質問です。

SCP(Secure Copy Protocol)とは、SSH(Secure Shell)をベースにしてリモートホスト間でファイルを安全に転送するプロトコルです。データを暗号化した状態で転送するため、インターネット経由でも機密情報を安全にやりとりできます。

本記事では、SCPの仕組み・主な機能・コマンドの使い方・SFTPや他のプロトコルとの違い・セキュリティ上の注意点まで、初心者にもわかりやすく解説します。

SCPとは?

SCP(Secure Copy Protocol)とは、リモートホスト間でファイルを安全に転送するためのプロトコル(通信規約)です。「cp(copy)コマンドをSSH経由で安全に実行できるようにしたもの」とイメージすると理解しやすいです。

SCPの基本情報

項目 内容
正式名称 Secure Copy Protocol
ベースプロトコル SSH(Secure Shell)
使用ポート 22番ポート(SSHと同じ)
対応OS Linux・Unix・macOS・Windows(WSL・WinSCPなど)
暗号化方式 AES・SHA-2などSSHの暗号化をそのまま使用

SCPの主な特徴

SSHによる強力な暗号化

SCPはSSHプロトコルを使って通信を暗号化します。転送中のデータはAES(Advanced Encryption Standard)やSHA-2などの強力な暗号化アルゴリズムによって保護されるため、盗聴や中間者攻撃によるデータの傍受・改ざんを防ぐことができます。

強固な認証機能

SSHの認証機能をそのまま活用できます。パスワード認証のほか、より安全な「公開鍵認証」にも対応しており、許可されたユーザーのみがファイル転送を実行できる環境を構築できます。

シンプルなコマンド操作

Linuxの「cp(コピー)コマンド」に似た直感的な構文でファイルを転送できるため、コマンドラインに慣れているユーザーならすぐに使い始められます。ディレクトリ全体の一括転送にも対応しています。

幅広いプラットフォーム対応

Linux・Unix・macOSでは標準でSCPコマンドが使用可能です。Windowsでも「WinSCP」「Windows Subsystem for Linux(WSL)」などを通じて利用できます。

よく使うSCPコマンドの書き方

基本的な構文

scp [オプション] [コピー元] [コピー先]

主なコマンド例

ローカルからリモートサーバーへファイルを転送する

scp /path/to/local_file.txt username@remote_host:/path/to/destination/

リモートサーバーからローカルへファイルを取得する

scp username@remote_host:/path/to/remote_file.txt /path/to/local_destination/

ディレクトリ全体を再帰的にコピーする(-rオプション)

scp -r /path/to/local_directory/ username@remote_host:/path/to/destination/

ポートを指定する(-Pオプション)

scp -P 2222 /path/to/file.txt username@remote_host:/path/to/destination/

秘密鍵を指定して認証する(-iオプション)

scp -i ~/.ssh/id_rsa /path/to/file.txt username@remote_host:/path/to/destination/

よく使うオプション一覧

  • -r:ディレクトリを再帰的にコピーする
  • -P [番号]:ポート番号を指定する
  • -i [鍵ファイル]:秘密鍵を指定する
  • -v:詳細ログを表示する(デバッグに便利)
  • -C:転送データを圧縮する(低速回線向け)

SCPの主な活用シーン

リモートサーバーへのファイルデプロイ

Webアプリケーションのアップデートや設定ファイルの更新など、開発・運用の現場でローカル環境からリモートサーバーへファイルを転送する際に広く活用されています。

バックアップの作成

ディレクトリ全体をリモートサーバーにコピーする機能を活用して、定期的なバックアップ作業に使われます。

セキュアなファイル共有

チームメンバーや複数拠点間でファイルを安全に共有する際にも使われます。転送データが暗号化されるため、機密情報の共有においても安心して使用できます。

SCP・SFTP・rsyncの違いと使い分け

SCPに似たファイル転送ツールとして「SFTP」「rsync」があります。それぞれの違いを整理しておきましょう。

比較項目 SCP SFTP rsync
ベースプロトコル SSH SSH SSH(またはデーモン)
暗号化 ◎ SSH暗号化 ◎ SSH暗号化 ◎ SSH暗号化
操作の柔軟性 △ ファイルコピーのみ ◎ ファイル操作全般 ○ 差分同期が得意
進捗表示 △ 限定的 ○ あり ◎ 詳細
差分同期 × 非対応 △ 手動 ◎ 自動差分転送
セキュリティ(現状) ⚠️ 脆弱性あり・非推奨化 ◎ 推奨 ◎ 推奨
主な用途 シンプルなファイルコピー ファイル操作全般・管理 大量データの同期・バックアップ

使い分けのポイント

  • SCP:シンプルなファイルコピーに。ただし現在は非推奨化が進んでいるため、新規採用は避けるのが無難
  • SFTP:ファイルの閲覧・削除・名前変更など双方向の操作が必要な場合に推奨
  • rsync:大量データの定期バックアップや差分同期が必要な場合に最適

SCPの脆弱性とセキュリティ上の注意点

SCPは長年にわたって安全なファイル転送ツールとして使われてきましたが、実はいくつかの重大な脆弱性が発見されており、現在は非推奨化が進んでいます

2019年に発覚した4つの脆弱性

2019年、フィンランドのサイバーセキュリティ企業F-Secureの研究者Harry Sintonen氏によって、SCPの1983年以降のすべての実装に4つのセキュリティバグが存在することが発見されました。

  • 権限変更の脆弱性:悪意あるSCPサーバーが、クライアント側のターゲットディレクトリの権限を無断で変更できる
  • ファイル上書きの脆弱性:悪意あるSCPサーバーが、クライアント側の任意のファイルを上書きできる
  • 操作隠蔽の脆弱性:ANSIコードを介してターミナルの出力を操作し、悪意ある操作を隠蔽できる
  • ファイル名偽装の脆弱性:転送されるファイル名を偽装できる
SCPがTLSを使用していないことが根本的な問題
SCPはTLS(Transport Layer Security)とその前身のSSL(Secure Sockets Layer)を使用していません。TLSは通信している2者のIDを暗号化キーに紐づけて正当性を検証できますが、SCPにはこの仕組みがないため、悪意あるサーバーからの不正な操作を防ぐことができませんでした。

OpenSSHの開発者による非推奨宣言

2019年、OpenSSHセキュリティユーティリティの開発者は、SCPを「時代遅れで柔軟性がなく、すぐに修正できない」と断言し、SFTPなどのより安全なプロトコルへの移行を呼びかけました。

現在では、OpenSSH 9.0以降でSCPのデフォルト動作がSFTPを使用するように変更されるなど、業界全体でSCPからの移行が進んでいます。

SCPを使う際の注意点

SSH鍵の適切な管理

SCPはSSHに依存しているため、SSH鍵の管理が非常に重要です。

  • 適切な強度の鍵を生成する(RSA 4096ビット以上、またはEd25519を推奨)
  • 秘密鍵にはパスフレーズを設定する
  • 定期的な鍵のローテーションを実施する
  • 不要になった公開鍵はauthorized_keysから削除する

転送先のアクセス制御

転送先サーバーのアクセス制御を適切に設定することで、意図しないファイルアクセスを防止できます。

  • ファイアウォールで22番ポートへのアクセスを必要なIPアドレスのみに制限する
  • SSHポートをデフォルトの22番から変更することを検討する
  • rootユーザーでのSSH・SCP接続を無効化する

新規導入はSFTPへの移行を推奨

既存のシステムでSCPを使用している場合は、SFTPへの移行を検討してください。SFTPはSSHベースでSCPと同様に暗号化を提供しつつ、ファイルの閲覧・削除・名前変更など双方向の操作が可能で、TLSに相当する証明書検証の仕組みも備えています。

SCP・SSHに関連する脆弱性・被害事例2選

事例1:SCPクライアントの脆弱性により任意ファイル上書きの恐れ

2019年、SCPクライアントに複数の脆弱性が確認されました。悪意あるSCPサーバーに接続した場合、クライアント側の意図しないファイルが上書きされたり、転送先ディレクトリの権限が変更されたり、ターミナル表示を偽装される可能性があるとされています。

この問題は、SCPが古いrcp由来の設計を引き継いでおり、サーバー側が送信するファイル名の検証が不十分だったことに起因します。現在ではOpenSSH 9.0以降で、scpコマンドのデフォルト転送方式が従来のSCP/rcpプロトコルからSFTPプロトコルへ変更されています。新規環境では、SCPではなくSFTPやrsyncの利用を検討することが重要です。

参考:SCP client multiple vulnerabilities|Harry Sintonen
参考:OpenSSH 9.0 Release Notes

事例2:SSHのセキュリティ不備によりサーバーが不正利用された事例

お茶の水女子大学では、研究室で運用していた計算用サーバーが海外から不正アクセスを受け、スパムメール発信の踏み台として悪用されました。調査の結果、サーバー構築時に作成されたアカウントに安易なパスワードが設定されていたことや、外部からのリモート接続(SSH)に対する適切なセキュリティ対策が取られていなかったことが原因とされています。

SCPはSSHを利用してファイルを転送する仕組みのため、SSHアカウントや認証情報の管理が不十分だと、ファイル転送だけでなくサーバー全体の不正利用につながる可能性があります。SSH接続では、強固なパスワードや公開鍵認証、多要素認証、接続元IP制限、不要アカウントの削除などを徹底することが重要です。

よくある質問(FAQ)

Q. SCPとFTPの違いは何ですか?

FTP(File Transfer Protocol)はデータを平文(暗号化なし)で転送するため、通信内容が盗聴されるリスクがあります。一方SCPはSSHによる暗号化を行い、安全にファイル転送できます。セキュリティの観点からFTPは非推奨であり、SCP・SFTP・FTPS(FTP over TLS)などを使用することが推奨されています。

Q. SCPはもう使えないのですか?

現在も使用できますが、セキュリティ上の問題から新規システムへの採用は推奨されていません。OpenSSHでも非推奨化が進んでいます。既存システムで使用している場合は、SFTPへの移行を計画的に進めることをおすすめします。

Q. SCPとSFTPどちらを選べばいいですか?

新規に採用する場合はSFTPを推奨します。SFTPはSSHベースでSCPと同等の暗号化セキュリティを持ちつつ、双方向のファイル操作・進捗表示・より安全な設計で優れています。コマンド操作ではなくGUIで使いたい場合は「WinSCP」「Cyberduck」「FileZilla(SFTP接続)」などのツールが便利です。

Q. Windowsでは使えますか?

Windows 10以降では、OpenSSHクライアントが標準搭載されているためSCPコマンドをコマンドプロンプトやPowerShellから直接使用できます。GUIで使いたい場合は「WinSCP」が代表的なツールです。

Q. SCPで転送できるファイルサイズに制限はありますか?

SCP自体にファイルサイズの制限はありません。ただし、大容量ファイルの転送では転送速度が遅くなる場合があります。大量データの定期転送や差分同期が必要な場合は、差分転送に対応した「rsync」の使用を検討してください。

まとめ

SCP(Secure Copy Protocol)は、SSHをベースにリモートホスト間でファイルを暗号化転送するプロトコルです。シンプルなコマンド操作でファイルのコピーができるため、長年にわたってLinux/Unix環境でのファイル転送に広く使われてきました。

ただし、2019年にすべての実装に影響する重大な脆弱性が発見されたこと、OpenSSHの開発者が非推奨を宣言したことから、新規システムへの採用は推奨されません。現在はSFTPへの移行が業界標準となっており、既存のSCP環境についても移行計画を立てることをおすすめします。

SCPを引き続き使用する場合は、SSH鍵の適切な管理・ファイアウォールによるアクセス制御・rootユーザーでの接続禁止・定期的なセキュリティパッチの適用を徹底することが重要です。

SNSでもご購読できます。