メインコンテンツまでスキップ

「Security」タグの記事が20件件あります

全てのタグを見る

ssh: tarコマンドによるファイル一括転送及び展開

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

ローカルホスト上のsshコマンドを実行する際の標準入力はリモートホストで実行するコマンドの標準入力として送出される。 例として、カレントディレクトリのファイル(a.txt, b.txt, c.txt)をリモートホスト上の指定ディレクトリにtar書庫で転送し展開するコマンドは下記の通り。

ローカルホスト上のプロンプト

$ ls
a.txt b.txt c.txt
$ tar zcf - * | ssh yu@172.16.56.168 tar zxf - -C /home/yu/test
yu@172.16.56.168's password:
$

tarコマンドのファイル名を指定するべき引数に「-」(ハイフン)を指定すると標準入力/標準出力となる。

リモートホスト上のプロンプト

$ pwd
/home/yu/test
$ ls
d.txt e.txt f.txt
<ローカル側でsshコマンド実行>
$ ls
a.txt b.txt c.txt d.txt e.txt f.txt

また、話変わってリモートホストで実行するコマンドの標準出力・エラー出力は、ローカルホスト上のsshコマンドの標準出力・エラー出力となる。 例として、リモートホストの指定ディレクトリのファイルをカレントディレクトリにtar書庫で転送し展開するコマンドは下記の通り。

リモートホスト上のプロンプト

$ pwd
/home/yu/test
$ ls
a.txt b.txt c.txt d.txt e.txt f.txt
$ cat *
a
b
c
d
e
f
$

ローカルホスト上のプロンプト

$ pwd
/home/yu/test
$ ls
$ ssh yu@172.16.56.168 'cd /home/yu/test ;tar zcf - * ' | tar zxf -
yu@172.16.56.168's password:
$ ls
a.txt b.txt c.txt d.txt e.txt f.txt
$ cat *
a
b
c
d
e
f
$

参考サイト

Linuxコマンド集 - 【 tar 】 ファイルを書庫化・展開する(拡張子.tarなど):ITpro

Linux: SUID, SGIDプログラムの検索 - findコマンド

· 約5分
Yu Sasaki
Enterprise Security Manager / Advisor

Linuxシステム内のプログラムのパーミッションににSUID(set user-ID)ビットもしくはSGID(set group-ID)ビットが設定されていると、プログラムの実行ユーザの権限ではなく、プログラムの所有ユーザ、グループの権限で実行される。(IBM i の借用権限みたいなものかな)例として、ユーザのパスワード変更コマンドであるpasswdコマンドがある。

# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

passwdコマンドはその他一般ユーザから実行可能であり、かつ下記の/etc/passwdファイルを編集する権限も必要である為、SUIDビットを立てている。

# ls -l /etc/passwd
-rw-r--r--. 1 root root 1686 Jun 27 19:31 /etc/passwd

SUID, SGIDビットのプログラムはユーザに対して高権限を与える側面もある為、システム攻撃者のバックドアプログラム/スクリプトとして悪用されることもある。これらを発見する手段の一つとして下記のコマンドがある。

# find / \( -perm -4000 -or -perm -2000 \) -type f -exec ls -la {} \;

簡単に解説すると()内の-permが検索対象のパーミッション設定、-type fで通常ファイルタイプを検索、-execでfind検索結果を-execの後続のコマンドに渡す。その際{}の箇所に検索結果を渡せる。VM上のLinuxで実行した結果は下記の通り。

# find / \( -perm -4000 -or -perm -2000 \) -type f -exec ls -la {} \;
find: `/proc/3652/task/3652/fd/5': No such file or directory
find: `/proc/3652/task/3652/fdinfo/5': No such file or directory
find: `/proc/3652/fd/5': No such file or directory
find: `/proc/3652/fdinfo/5': No such file or directory
-rwsr-x---. 1 root dbus 50552 Sep 14 2012 /lib64/dbus-1/dbus-daemon-launch-helper
-rws--x--x. 1 root root 14280 Oct 14 17:14 /usr/libexec/pt_chown
-rwsr-xr-x. 1 root root 11080 Sep 20 03:40 /usr/libexec/polkit-1/polkit-agent-helper-1
-rwx--s--x. 1 root utmp 9808 Aug 19 2010 /usr/libexec/utempter/utempter
-rwsr-xr-x. 1 root root 224912 Feb 22 2013 /usr/libexec/openssh/ssh-keysign
-rwsr-xr-x. 1 root root 12872 Jul 12 2012 /usr/libexec/pulse/proximity-helper
-rwsr-xr-x. 1 abrt abrt 5792 Sep 26 22:11 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
-rwx--s--x. 1 root utmp 17160 May 23 00:10 /usr/lib64/vte/gnome-pty-helper
-rwsr-xr-x. 1 root root 61152 Nov 13 2012 /usr/lib64/nspluginwrapper/plugin-config
-r-sr-xr-x. 1 root root 10224 Feb 18 2013 /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
-r-sr-xr-x. 1 root root 9532 Feb 18 2013 /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
-rwsr-xr-x. 1 root root 36144 Dec 8 2011 /usr/bin/newgrp
-rwxr-sr-x. 1 root tty 12016 Apr 29 2013 /usr/bin/write
---s--x---. 1 root stapusr 162584 Feb 22 2013 /usr/bin/staprun
-r-xr-sr-x. 1 root tty 15224 Jul 19 2011 /usr/bin/wall
-rws--x--x. 1 root root 20056 Apr 29 2013 /usr/bin/chsh
-rwsr-xr-x. 1 root root 18072 Sep 20 03:40 /usr/bin/pkexec
-rwsr-xr-x. 1 root root 71480 Dec 8 2011 /usr/bin/gpasswd
-rwxr-sr-x. 1 root mail 20392 Aug 19 2010 /usr/bin/lockfile
-rwsr-xr-x. 1 root root 47520 Jul 19 2011 /usr/bin/crontab
-rwsr-xr-x. 1 root root 54240 Jan 30 2012 /usr/bin/at
-rwxr-sr-x. 1 root nobody 112704 Feb 22 2013 /usr/bin/ssh-agent
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
-rwsr-xr-x. 1 root root 2214792 Oct 16 03:56 /usr/bin/Xorg
-rws--x--x. 1 root root 20184 Apr 29 2013 /usr/bin/chfn
---s--x--x. 1 root root 123832 Feb 22 2013 /usr/bin/sudo
-rwsr-xr-x. 1 root root 66352 Dec 8 2011 /usr/bin/chage
-rwxr-sr-x. 1 root smmsp 833512 Nov 12 2010 /usr/sbin/sendmail.sendmail
-rwxr-sr-x. 1 root postdrop 213736 Dec 3 2011 /usr/sbin/postqueue
-rwsr-xr-x. 1 root root 9000 Aug 5 22:21 /usr/sbin/usernetctl
-rws--x--x. 1 root root 41136 Aug 23 2010 /usr/sbin/userhelper
-r-s--x---. 1 root apache 13984 Aug 14 02:30 /usr/sbin/suexec
-rwxr-sr-x. 1 root postdrop 180808 Dec 3 2011 /usr/sbin/postdrop
-rwx--s--x. 1 root lock 15808 Aug 19 2010 /usr/sbin/lockdev
-rwsr-xr-x. 1 root root 53472 Apr 29 2013 /bin/umount
-rwsr-x---. 1 root fuse 32336 Dec 8 2011 /bin/fusermount
-rwsr-xr-x. 1 root root 34904 May 23 20:00 /bin/su
-rwsr-xr-x. 1 root root 40760 Sep 26 23:35 /bin/ping
-rwsr-xr-x. 1 root root 36488 Sep 26 23:35 /bin/ping6
-rwsr-xr-x. 1 root root 77336 Apr 29 2013 /bin/mount
-rwxr-sr-x. 1 root root 8792 Aug 5 22:21 /sbin/netreport
-rwsr-xr-x. 1 root root 10272 Feb 22 2013 /sbin/pam_timestamp_check
-rwsr-xr-x. 1 root root 34840 Feb 22 2013 /sbin/unix_chkpwd

diffコマンドやcronと併用することで、定期的に差分チェックが可能。 仮に不要なビット設定がされているコマンドがあった場合は以下のコマンドでSUID, SGIDを削除する。

chmod u-s <ファイル名>
chmod g-s <ファイル名>

実行後の対象ファイルのパーミッションは通常のxに置き換わる。

Linux: tcpdumpコマンドによる通信パケットのキャプチャ(スニッフィング)

· 約22分
Yu Sasaki
Enterprise Security Manager / Advisor

先日tcpdumpの復習をしたので、備忘録として使い方を下記にまとめておく。

tcpdumpとは

tcpdumpはほとんどのLinuxディストリビューション、及びWindows(Windowsバージョンではwindumpという)で使用できるパケットキャプチャー、基本的なフィルタリングが出来るコマンドベースのFreewareツール。sniffer(スニッファー)ツールにカテゴライズされ、スニッフィングの対象プロトコルはIP, TCP, UDP, ICMP。 (参考) Wikipedia : tcpdump - Wikipedia, the free encyclopedia

公式サイト

ssh: 解決法 - WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

sshでホストサーバに対してログインを試みた際、下記のWarningメッセージが出力されログインできない。

事象

実行環境はMac OS。

$ ssh root@172.16.56.135
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
07:1a:62:b4:68:79:6e:53:dd:1e:ca:e1:28:89:7a:78.
Please contact your system administrator.
Add correct host key in /Users/yu/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/yu/.ssh/known_hosts:5
RSA host key for 172.16.56.135 has changed and you have requested strict checking.
Host key verification failed.
$

原因

Warningメッセージに記載の通りで、「ホスト側の鍵が変わっている。誰か何か(盗聴とか)やってるかも」とのこと。今回はVMWare上のゲストOSのsshdを再構築・鍵の再作成した為、上述のWarningが発生。

対応

known_hostsファイルの当該行を削除することで解決可能。上記のWarningだと.ssh/known_hostsの5行目172.16.56.135のエントリが該当。

参考サイト

OpenSSH サーバのインストールと公開鍵・秘密鍵の作成・設置

· 約5分
Yu Sasaki
Enterprise Security Manager / Advisor

この度さくらVPS(OS: CentOS 5)を利用し始めた為、備忘録として掲載。

事前準備

先ずリモートコンソール上で以下の作業を実施。尚、コンソールはブラウザ上ではなく、Java Applet版の方が使い易い。

既存のsshdサーバをアンインストール

# /etc/rc.d/init.d/sshd stop <-- 停止
# yum -y remove openssh <-- アンインストール

タイムスタンプ署名されたデータから利用者が確認できる情報

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

タイムスタンプ署名の生成と検証のわかりやすいフローがあったので紹介。 タイムスタンプ署名の生成、検証フロー タイムスタンプサービスSecureSealの仕組み-SecureSeal:NTTデータ タイムスタンプ署名されたデータから利用者が確認できる情報は、データのコード署名が行われた日時。

図の説明

利用者がタイムスタンプトークンをデータと一緒に取得した後、TSAの公開鍵を用いてタイムスタンプトークンを複合(7)。複合するとハッシュ値(メッセージダイジェスト)+日時(コード署名が行われた日時)を取得できるので、ここで取得できたハッシュ値と、取得したデータから算出したハッシュ値を比較し改ざんやなりすましがされていないかを確認(8)。

携帯の迷惑メールフィルタのホワイトリスト(ドメイン)設定例

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

携帯メールアドレスを分かりやすい文字列(短いor意味がある)すると迷惑メールが頻繁に来るので、迷惑メールフィルタのホワイトリスト設定で受信許可するドメインを絞ると良いかもしれません。 追記(2009-7): 許可アドレス以外は問答無用ではじいてしまうので、予期しないドメインからの重要なメールを取りこぼしてしまいます。ブラックリスト型に切り替えようかな。

ホワイトリストドメイン例

softbank.ne.jp vodafone.ne.jp ezweb.ne.jp docomo.ne.jp gmail.com me.com mac.com i.softbank.jp dk.pdx.ne.jp 迷惑メールのドメインをチェックするとyahoo.com、yahoo.co.jpやhotmail.comが多いので、これらはリストには入れませんでした。 その他、使用しているサービスからの連絡メールが受け取れるように別途ドメインを追加していけば良いかと思います。

sshdのログファイルの確認方法

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

サーバーでsshdサービスを使っていると、招かれざる人(大抵bot)も相応の頻度でアクセスしてくる。何時何処からどのようなアクセスがあるのかを把握する為にログファイルを確認することは大事。

sshd のログファイルのパスはCentOS / Fedora系ではデフォルトでは /var/log/secure となる。。

# cat /var/log/secure

尚、ssh のログインに失敗/成功したユーザ数は以下の様なコマンド等でカウントできる。

# grep -c invalid /var/log/secure
# grep -c Failed /var/log/secure
# grep -c Accepted /var/log/secure