挑戦
かつて、当局はオフィスで何が起こっているかを24時間体制で記録するよう要求しました。 また、勤務時間中-サイトのオフィスから定期的に写真を公開します。
私の前任者から、私は得た:
- 何が起こっているのか写真を撮るD-Linkスマートカムコーダーを備えたいくつかのオフィス
- FreeBSD上のサーバー
- 各カメラからの画像が移動する組織のウェブサイト
- レコードアーカイブを保存するローカルネットワーク上のネットワークフォルダー
それは知られています:
-FreeBSDサーバーは外部からアクセスできません
-ホストは1分間に1回以上FTPに接続することを好まない
-通信チャネルの品質と厚さを考えると、カメラはビデオを録画しませんが、定期的に写真を撮ります
タスクの設定時に、カメラは互いに独立してFTPホスティング事業者と切断し、スケジュールに従って1分ごとに写真をアップロードしました。 その結果、ホスティング事業者はサイトへのFTPアクセスを定期的にブロックしました。
解決策
解決策は理論です
この問題の解決策は、SPbU ITMOで一度与えられた情報セキュリティに関する教訓の1つでした。 レッスンでは、セキュリティゾーン、そのレベル、およびレベル間の読み取り/書き込みのルールについて説明しました。
簡単に言うと、最高レベルのセキュリティ(たとえば、-1)を持つアプリケーションは、レベル2または3のアプリケーションに対して読み書きできますが、アプリケーション2は、アプリケーション3に対して読み書きすることはできますが、アプリケーション1に対して読み書きすることはできません。
実際、 ルールはもう少し複雑ですが、読みやすくするためにルールを単純化しました。
誰が誰
上記のすべての要素の相互作用スキームは単純に並んでいます:
カメラはFTP経由で私のサーバーに写真をアップロードし、サーバーはそれらをネットワークフォルダーにコピーし、ホスティングで公開します。
このサーバーはレベル1として機能し、他のすべてのレベルにアクセスできます。 ルール違反のようなものがあることに気付くのは簡単です。下位の2番目のレベルを持つカメラには、1番目のレベルに書き込む権利が与えられます。 良い方法では、サーバーはカメラから画像を読み取って、アクセスを許可しないように教えられるべきでしたが、この場合、システムの全体的なセキュリティは影響を受けませんでした。 私は説明します:トリックは、カメラがFTPフォルダーに書き込むことです。FTPフォルダーは、カメラと同じセキュリティレベルを持ちます。 2番目。 このフォルダーは他のすべてのフォルダーとは別であり、カメラからの現在の画像のみが含まれています。 カメラのユーザー名とパスワードを使用してFTPに接続するユーザーは、オフィスの写真を数枚しか受信できませんが、すべてのアーカイブを表示することはできません。
このすべてをペイントしている間に、攻撃者はこの方法でわいせつを含む写真をアップロードでき、自動的にサイトに到達すると考えました。 これを回避する方法について考える必要があります。 たとえば、カメラの静的IPアドレスを使用してFTPへのアクセスを制限し、カメラとFTPへのアクセス用のパスワードを複雑にすることができます。 しかし、カメラから画像を読み取るようにサーバーに教えるよりはましです。何も思い付かないことを恐れています。 対処方法-カメラの技術的な制限。
しかし、心を失いません。 カメラは物理的なアクセスに最も便利な場所にぶら下がっていませんが、それらを掘り下げるにはパスワードを知る必要があります...また、カメラをねじ込む前にマスクを着用するかライトをオフにする必要がありますが、これらのアクションは攻撃者を焼き尽くします 誰がいつ知られていたか。
ラムに戻る
そのため、カメラは写真をサーバーに統合し、SHの巧妙なスクリプトを使用して、現在の日付でアーカイブフォルダーにコピーし、現在の時刻が教育機関の動作モードと一致する場合にサイトにコピーをアップロードします。 そして翌日、サーバーは、昨日となったアーカイブフォルダーをサイズ0のファイルから削除し、ffmpegユーティリティを使用してビデオ内のすべての写真を収集し、それらを削除します。
解決策は実践です
- FreeBSDサーバーにProFTPをインストールして構成します(好みについては議論しません。明確なオプションを提供します)およびffmpeg。
- カメラ用のフォルダーとアーカイブ用のフォルダーを作成します(たとえば、/ usr /フォルダーのどこかに)
- ProFTPでカメラのアカウントを作成し、作成したフォルダーを付与します
- Webインターフェースを使用してカメラを設定し、FTPを介して24時間体制で、たとえば1分ごと(何期間)にサーバーに接続し、写真を保存します。
- また、正しい日付、時刻、および正確な時刻のローカルNTPサーバーとの自動同期を使用してカメラを構成することも非常に重要です。
- ホスティングのFTP接続設定を思い出します。
- 独創的なSHスクリプトを作成し、カメラで写真をアップロードする頻度と同様の実行頻度でcronに入れます。 1分に1回。
- 楽しんで当局に報告してください。
そして最後に、ソリューションの中心はそれ自身のスクリプトです:
#!/bin/sh ## . , ## , day="`date +%Y-%m-%d`" archive="/store/STORE/cam_archive" ## FTP ## FTPUSER='*********' ## IP- FTPHOST='***.***.***.***' ## FTP FTPPASS='************' ## , REMOTEDIR="/www/img" ## LOCALDIR="/store/STORE/cam" ## , cd $LOCALDIR # echo . echo -================================================- date ## , mkdir $archive/$day >/dev/null 2>&1 ## . time1=`date +%H_%M_%S` ## , . # ( , ) echo . for file in $(ls -1 *.jpg) do camfolder=`echo ${file} | sed 's/\.jpg//'` mkdir $archive/$day/$camfolder >/dev/null 2>&1 cp $file $archive/$day/$camfolder/$time1\_$file done # , # grep , minutes1 minutes2 minutes1='01 03 05 07 09 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59' minutes2=`date +%M` result=`echo ${minutes1} | grep ${minutes2}` # , (>=10 and <=18 and !result) if [ `date +%H` -ge 10 ] && [ `date +%H` -le 18 ] && [ -n "$result" ] then { echo FTP. ## FTP- ftp -n $FTPHOST <<EOF quote USER $FTPUSER quote PASS $FTPPASS binary cd $REMOTEDIR dir mput * a EOF } fi # (=00 and =00), . if [ `date +%H` -eq '00' ] && [ `date +%M` -eq '00' ] then { # LASTDAY=`date -v-1d +"%Y-%m-%d"` ## cd $archive/$LASTDAY/ ## ## 10k, - find $archive/$LASTDAY/ -size -10k -print | { while read files do rm "${files}" done } ## , for camfolders in $(ls -1 -U) do ## 1. y=0 ls -1 $archive/$LASTDAY/$camfolders/*.jpg | { while read files2 do y=`expr ${y} + 1` mv ${files2} $archive/$LASTDAY/$camfolders/img`printf %04d ${y}`.jpg done } ## 2. ## TODO: ffmpeg -f image2 -i $archive/$LASTDAY/$camfolders/img%04d.jpg -r 6 -s 720x576 $archive/$LASTDAY/$camfolders\_$LASTDAY.avi ## 3. rm -rf $camfolders done } fi exit 0
ファイルの作業:
- 控えめに言っても、ビデオの圧縮品質はひどく低下します。 トリッキーなffmpegオプションがわかりません。 そして、十分なコーデックがない可能性があります。 出会った人に、鍵の適切なリストを提案してもらいます。
-
カメラを装った攻撃者-インサイダーは、FTPパスワードを見つけない限り、評判の良いサイトに非酸性の改ざんを仕掛けることができます。何らかの方法で閉じるか、サーバーのカメラのWebインターフェースにアクセスして現在の画像をダウンロードするようにサーバーに教える必要があります(カメラには静的アドレスcam1 / snapshot.phpがあり、認証は.htaccessに基づいています)。どのコマンドとユーティリティがこれを解決できるかについて、助けを借りてアドバイスしてください。
UPD:この瞬間の解決策がAkintを促しました 。 少し後でコードに追加します。