SunOS 5.10/5.11 の in.telnetd に欠陥が

- SunOS 5.10/5.11 in.telnetd Remote Exploit by Kingcope
  http://www.st.ryukoku.ac.jp/~kjm/security/memo/2007/02.html#20070212_SunOS

  SunOS 5.10/5.11 の in.telnetd にリモートから認証なしでログインできる欠陥が見つかったということです.
  カンタンに手作業で入れてしまいます.

  手元の Solaris 10 1/06,06/06 でも再現しました.
  とりあえずの対策は in.telnetd を disable にすることでしょうか.

# svcadm disable telnet

  以下の記事も参考に

- ref.: SunOS 5.10/5.11 in.telnetd に認証迂回の脆弱性
  http://diary.sytes.net/solaris/?20070212#12-1

- 追記 (2007-02-21)
  パッチが出ました
o 120068-03 SunOS 5.10: in.telnetd patch
o 120069-03 SunOS 5.10_x86: in.telnetd patch

情報セキュリティ技術大全 - 信頼できる分散システム構築のために

  4822281426
  amazon.co.jp 詳細ページへ
  ロス アンダーソン (著), Ross J. Anderson (原著), トップスタジオ (翻訳)
  日経BP社
  ISBN: 4822281426
  2002/09
  6,090 円

情報セキュリティの世界的権威が,ハード/ソフト/制度の側面から技術を体系的に整理した教科書

TortoiseSVN で公開鍵を使う方法

  TortoiseSVN で svn+ssh を利用した場合に,認証をパスフレーズではなく公開鍵で行う方法を紹介します.

  SSH クライアントには TortoiseSVN 付属の TortoisePlink を使います.
  TortoisePlink は PuTTY 由来らしいので PuTTY 形式の鍵を使う必要があるみたいです.

  PuTTY 形式の鍵を生成したり,OpenSSH の鍵を PuTTY 形式に変換したりするために,PuTTYgen が必要になります.
  PuTTYgen は以下のサイトで入手できます.この記事の執筆時点の最新版は 0.58 です.

- PuTTY Download Page
  http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

1. 鍵を新たに作成する方法


  1. 鍵の生成
     PuTTY を起動し右中央部にある [Generate] を選択します.
     マウスをひたすら動かしていると,そのうち鍵が生成されます.

  2. 公開鍵をサーバに登録
     Public key for pasting into OpenSSH authorized_keys file の部分をコピーして
     $HOME/.ssh/authorized_keys に貼り付けます.
     
     $HOME/.ssh/authorized_keys がない場合は作成しましょう.

  3. 秘密鍵の保存
     右中央部にある [Save private key] を選択します.
     PuTTY の秘密鍵の拡張子は ppk になります.ここでは

   C:\keys\svn.ppk

     として保存します.
     秘密鍵のパスフレーズは,同じ画面の「Key passphrase」で設定します.

  4. TortoiseSVN で公開鍵を使うように設定
    「TortoiseSVN 設定」の「ネットワーク」を開きます.
    「SSH クライアント」に TortoisePlink を選択して,先ほど作成した秘密鍵を以下のように指定します.

   TortoisePlink -C -l username -i C:\keys\svn.ppk

     username はユーザ名です.-C オプションは圧縮を有効にするオプションです.
     

  以上が,鍵を新たに作成した場合の TortoiseSVN で公開鍵を使う方法になります.

2. 既にある OpenSSH の鍵を PuTTY 形式に変換する方法


  1. 鍵の変換
     PuTTY を起動し右中央部にある [Load] を選択します.
     秘密鍵にパスフレーズが設定してある場合は,パスフレーズの入力画面が表示されるので,パスフレーズを入力します.

     すぐに PuTTY 形式の鍵に変換されます.

  2. 秘密鍵の保存および TortoiseSVN で公開鍵を使うように設定
     上記「1. 鍵を新たに作成する方法」の「3. 秘密鍵の保存」からの手順と全く同じになります.

  以上が,OpenSSH の鍵を PuTTY 形式に変換した場合の TortoiseSVN で公開鍵を使う方法になります.

3. 確認

   試しに,コミットログを表示するなどしてみてください.
   パスフレーズによる認証のときは,以下のように「Password」という入力画面が表示されました.

   Password

   しかし,公開鍵認証の場合は,以下のように「Passphrase for key "..."」という入力画面が表示されます.

   Passphrase

- tortoisesvn.tigris.org
  http://tortoisesvn.tigris.org/

実用SSH 第2版 ― セキュアシェル徹底活用ガイド

  4873112877
  amazon.co.jp 詳細ページへ
  Daniel J. Barrett (著), Richard E. Silverman (著), Robert G. Byrnes (著),
  小島 肇 (監修), 坂井 順行 (翻訳), 鹿田 幸治 (翻訳), 園田 道夫 (翻訳),
  高橋 基信 (翻訳), 根津 研介 (翻訳), 宮本 久仁男 (翻訳)
  オライリー・ジャパン
  ISBN: 4873112877
  2006/11/22
  5,040 円

- 目次
  http://www.oreilly.co.jp/books/4873112877/toc.html

- 「実用SSH 第2版 ― セキュアシェル徹底活用ガイド」サポートページ
  http://www.st.ryukoku.ac.jp/~kjm/security/sshbook/

Firefox の Flash Player をアップデートする方法

  Flash Player にセキュリティーホールが見つかったとのことで,Flash Player をアップデートしようとしました.

- Adobe Flash Player ダウンロードセンター
  http://www.adobe.com/go/getflashplayer_jp

  ところが,Firefox ではこのアップデートを適用しても Flash Player のバージョンが古いままのときがあります.
  その際は,<Firefox をインストールしたディレクトリ>\plugins の中にある

flashplayer.xpt
GetFlash.exe (ない場合も)
GetFlash.exe.manifest (ない場合も)
NPSWF32.dll
NPSWF32_FlashUtil.exe (ない場合も)

  を削除して,例えば以下ののページにアクセスします.

- Macromedia Flash Player
  http://www.adobe.com/jp/products/flash/about/

  ここで,プラグインのダウンロードを促されますので,そのままインストールします.

  プラグイン検索サービス

  そうすると無事に,最新版にアップデートされます.

  Flash Player

connect を使って簡単に多段 SSH を実現する方法

  OpenSSH 限定の話になるのかもしれませんが,localhost から remotehost1 を経由して remotehost2 に接続するような
  多段 SSH を実現するには,ポートフォワードを使う方法がありました.

  この話は以前ここでも,話題に上げたことがありました ([2005-01-24-2]).
  もちろんこの方法でも実現できますが,OpenSSH の ProxyCommand を利用することで簡単に多段 SSH が実現できます.


  1. ソース (http://www.meadowy.org/~gotoh/ssh/connect.c) を取得します.

  2. ソースのコメントを参考に connect.c をコンパイルします.うちの環境は Solaris なので,以下のようにしました.

$ gcc -O2 -o connect -lresolv -lsocket -lnsl connect.c

  3. connect コマンドをパスの通ったところにコピーします.
     もしくは後でフルパスで指定するのであれば,適当な所にコピーしておきます.

  4. $HOME/.ssh/config に ProxyCommand の設定をします.

Host remotehost2
    # ここの username は remotehost2 のユーザ名
    User username
    # /usr/local/bin/connect は remotehost1 の connect の場所を指す
    ProxyCommand ssh remotehost1 /usr/local/bin/connect %h %p


  これで,ssh remotehost2 をすれば,remotehost1 を経由して remotehost2 に接続することができます.

  connect は 多段 SSH 以外にも,SOCKS や HTTP プロキシも利用することができますので,
  社内や学内などから外部の SSH サーバに接続する場合に,とても便利だと思います.

- SSH Proxy Command -- connect.c
  http://zippo.taiyo.co.jp/~gotoh/ssh/connect.html

- ref.: 外部の SSH サーバに接続する方法
  http://www.st.ryukoku.ac.jp/services/proxy-ssh.html

- ref.:
  [2005-01-24-2]  SSH でポートフォワード
  [2004-12-19-1]  SSH で多段接続?
  [2004-04-21-13] ファイアウォールを超えて SSH する SSH Proxy Command

- 追記 (2008-04-09)
  connect.c のダウンロード先が変更になっていたので、修正しました。

Sun SSH では ServerAliveInterval が設定できない件

  NAT などの影響で一定時間通信がないと ssh 接続が固まったり,切れたりすることがあります.

  この対処法として OpenSSH の場合は,$HOME/.ssh/config などに

Host *
    ServerAliveInterval 60


  のようにして,60 秒ごとに無害なパケットを送信するようにします.

  さて,Solaris 9 あたりからバンドルされている Sun SSH も OpenSSH をベースにしているので,
  ServerAliveInterval が使える……と思ったのですがが,man ssh_config を見てもオプションは出てきませんし,
  実際に設定してみても,

/home/sunaoka/.ssh/config: line 35: Bad configuration option: ServerAliveInterval
/home/sunaoka/.ssh/config: terminating, 1 bad configuration options

  このようにエラーが出て起動できません.strings `which ssh` | grep -i ServerAliveInterval をしてみても,
  表示されませんので多分,実装されていないと思われます.

  対処法として,サーバ側で設定することができるのであれば ClientAliveInterval を sshd_config に設定してあげればいいようです.

ClientAliveInterval 60


  これで 60 秒ごとにサーバから確認用のパケットが送られてきます.
  とりあえず問題は解決したのですが,サーバ側の設定をできない場合は困りますね……

  また,参考までにベースとなった OpenSSH のバージョンを調べてみようとすると,

$ strings `which ssh` | grep OpenSSH
OpenSSH*
OpenSSH_3.6*,OpenSSH_3.7*,OpenSSH_3.8*
OpenSSH_3.2*,OpenSSH_3.3*,OpenSSH_3.4*,OpenSSH_3.5*
OpenSSH_2.*,OpenSSH_3.0*,OpenSSH_3.1*
OpenSSH_2.9p*
OpenSSH_2.5.3*
OpenSSH_2.5.0*,OpenSSH_2.5.1*,OpenSSH_2.5.2*
OpenSSH_2.5.0p1*,OpenSSH_2.5.1p1*
OpenSSH_2.3.*
OpenSSH_2.3.0*
OpenSSH-2.0*,OpenSSH-2.1*,OpenSSH_2.1*,OpenSSH_2.2*

  以上の結果からおそらく OpenSSH 3.8 ではないかと思われます.

IE における "expression" の過剰検出による XSS の 誘因

  http://archive.openmya.devnull.jp/2006.08/msg00369.html

  IE では expression(式) をスタイルシート内で記述することで JavaScript を記述することができるのは有名ですが,
  IE による expression の検出がやたら過剰で XSS を引き起こしやすいということらしい.

  実態参照やコメントの挿入,Unicode 文字,全角文字で記述しても expression として検出される.
  詳細は,上記サイトより引用.

IE では、以下のようなスタイルを記述することで、JavaScript を動作させる
ことが可能です。

1) <style>ブロック内での定義
<style>input { left:expression( alert('xss') ) } </style>

2) インラインでのスタイル定義
<div style="{ left:expression( alert('xss') ) }">

3) コメントの挿入
<div style="{ left:exp/*  */ression( alert('xss') ) }">

4) バックスラッシュでのコードポイント指定
<div style="{ left:\0065\0078pression( alert('xss') ) }">

5) 実体参照
インラインでのスタイル定義では、実体参照が利用可能です。
<div style="{ left:&#x0065;xpression( alert('xss') ) }">

6) 全角文字
<div style="{ left:expression( alert('xss') ) }">

7) 特定のUnicode文字
<div style="{ left:expRessioN( alert('xss') ) }">
R は U+0280、N は U+0274 または U+207F が利用可能です。

上記 1) ? 7) は相互に組み合わせて表記することも可能です。
また、6) および 7) は、IE7 RC1 では動作しません。

  アプリケーション側で対応しなければならないので,スタイルシートの記述を許可しているアプリケーションは注意が必要.

- via: セキュリティホール memo メーリングリスト
  http://memo.st.ryukoku.ac.jp/archive/200608.month/9096.html

sodo のログを分離して保存する方法

  sudoers(4) を見ると,以下のような記述が見つかる.

    syslog      Syslog facility if syslog is being used for
                logging (negate to disable syslog logging).
                Defaults to local2.

  すなわち sodo のログはデフォルトで syslog のファシリティ local2 に送られるということ.

  また,プライオリティはというと,これも sudoers(4) には以下のように書いてある.

    syslog_goodpri
                Syslog priority to use when user authenticates
                successfully.  Defaults to notice.

    syslog_badpri
                Syslog priority to use when user authenticates
                unsuccessfully.  Defaults to alert.

  つまり,ユーザの認証が成功した場合は notice,失敗した場合は alert である.

  これを syslog.conf に設定してあげればいい.以下 Solaris 10 での例.

local2.notice        ifdef(`LOGHOST', /var/adm/sudolog, @loghost)


  ここでは,/var/adm/sudolog にログを出力するようにした.
  あとは,

# touch /var/adm/sudolog
# pkill -HUP syslogd

  で無事ログが出力される.

Solaris 10 にバンドルされている SSH はデフォルトではポートフォワードが許可されていない件

  はまった.
  ポートフォワードを許可して SSH を再起動すれば OK.

% vi /etc/ssh/sshd_config
AllowTcpForwarding yes

% svcadm refresh ssh