Puki Wikiへのアタック対応

個人サイトでPuki Wikiを使用していますが、ほっておいたら色々書き換えられてしまいました。調べてみるとPuki Wikiに関しては設定変更で書き込み時の認証が可能でした。
(pukiwiki.ini.php)

ユーザの設定部分

そして編集対象画面の設定部分

編集を有効にして、編集画面ごとに対象ユーザを設定。
ここでは全ての画面に対して一ユーザを設定。

編集だけでなく、閲覧もユーザ管理できるようなので、一般公開したくない情報などをそれで管理することも可能かな…….

 

Bingのオープニング画面のリンクを自動取得

Bingの日替わり画面の画像を毎日自動的に取得しようというプロジェクト。
ページで使われている画像単体のURLを毎日自動的に取得しようということです。
基本的には以下の流れになります。

curlをつかってwww.bing.comにアクセス。
出力データからjpg,mp4をキーにしてサーチ。
さらに構文をばらばらにして、ファイルへのフルパスを取得。
ついでに、その結果を自動的にhtmlフォーマットでサイトにアップ。

データ取得用のスクリプトはこんな感じになります。

 

このスクリプトにて毎日、日付がついたファイル内に各画像へのフルパスが格納されます。curlの出力からコーテーションをスペースに置き換えています。これでスペースで分割されたデータになり、kshのforで扱いやすくなります。forで各エントリからjpgが含まれたもののみをファイルに格納していきます。同様の方法でmp4の動画のフルパスも取得可能です。
次にここからhtmlのページを作成します。

 二つの関数を階層で使用しています。
jpg.で始まるファイルのリストを作成して、そのファイル内のフルパスを一行ずつ取り出して、そこからhtml上のアンカーストリングを作成します。画面上のアンカー名がファイル名と同一ではちょっと悲しいので、日付ストリングだけになるようにしています。
この2種類のスクリプトを毎日cronで実行すれば毎日クリックするだけでBingの背景画像を楽しむことができるはずです。
パールを使えばもう少しスマートにできるかもしれませんが、依然Kshell人間です。

アタックされています……

昨日あたりからサーバへのhttpアクセスが増加しています。 理由を調べたところ、wordpressへのログインアクセスが異常に増えています。 しかもそのソースアドレスは殆ど別のアドレスです。 ざっと数えただけでも昨日は2600件、本日もすでに1500件を越えています。 IPのキャプチャーを取ってWiresharkで観察してみました。

画面の例ではパスワードにpokemonを設定してアタックしていますが、前後のパケットを見ると、アルファベット順に何らかの辞書上の単語を順番にトライしているようです。
このレベルの意味のある単語だけでのアクセスであればパスワードが破られることは無いと思いますが、wordpressにバグなどがあれば、その限りではありません。
これらの多数のアドレスから順序だってアクセスがあるということはなにかの方法でこれだけ多数のPCなりサーバをすでにコントロールできる状態にしているのでしょうか?
それとも、何らかの方法でソースのIPアドレスを成りすます方法があるのでしょうか?
最初はこれだけ多くのPCがのっとられているのかなと思っていましたが、おそらく、成りすましなんでしょうね。
どこかに通報するべきなんでしょうか?
あるいはどこから来ているのか探る方法はないかと思っています。

 

Web ServiceのSSL化

昨日ちょっと触れました、Web ServiceのSSL化です。
2時間位、ネットの情報とともに格闘したら解決しました。意外に簡単でした。

まず、自分のhtppsの環境を理解する必要があります。Tomcat上のアプリケーションがhttpsで通信される場合、二つの方法があります。ひとつはApache(httpd)でSSLをイネーブルして、Tomcatでは何もしない方法。もうひとつはApacheはいじらず、Tomcat自体のSSLを有効にする方法。Apacheを使用していない環境であれば必然的に後者になります。
このあたりの環境を理解しないでネットの調査をするといらないことに時間を費やしてしまいます。私のように….。私の環境はApacheでSSLです。

Apache側でSSLを実現していますので、私の場合にはTomcatをいじる必要はありませんでした。まず、ベースは他のWebApplicationのSSL化と同じことになります。このあたりは以前、自分のWikiに記載しておきました。
Client側のURLをhttpsに変更してClientを起動します。しかし、以下のようなエラーが出てしまいます。
javax.servlet.ServletException: javax.servlet.jsp.JspException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
実はClient側のJREがこのサイトを正規のものと理解できないので、アクセスできないようです。ですから、ClientのJRE自体にこのサーバの認証データを登録する必要がありました。
先ほどのApacheのSSL化では以下の三つのセキュリティ関連のファイルを作成しました。
server.key(秘密鍵)
server.csr(CSRファイル、公開鍵+証明書申請情報)
server.crt(デジタル証明書)
このうちClient側に設定するファイルはserver.crtです。
このファイルをブラウザーを使用してPCにダウンロードすると、なぜかファイル名が
server.cer
に変化していました。ブラウザー、あるいはWindowsがファイルの意味を理解しているようです。
さて、各JREには以下のようなファイルがあり、そこにサーバの認証情報が格納されるようです。
例:\glassfish3\jdk7\jre\lib\security\cacerts
keytoolというjavaのツールを使ってcertificateを追加します。keytoolはjre\binにありますので、場合によってはPathを張る必要があります。
コマンド:
> keytool -import -alias <別名> -file client.cer -noprompt -trustcacerts -keystore %JAVA_HOME%/jre/lib/security/cacerts

私の実例:
keytool -import -alias nantoka7cert -file server.cer -noprompt -trustcacerts -keystore \glassfish3\jdk7\jre\lib\security\cacerts

いくつかのJREを併用している場合はそれぞれ設定しておいた方が良いかもしれません。
この時点で最初のエラーは出なくなりましたが、私のjRE7の環境ではさらに以下のエラーが出ました。
Exception in thread “main” javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name
これはJREからURLの表現に関してセキュリティが厳しくなっているようで、私のssl.confの設定しデフォルトのままだったので起きた問題でした。
ssl.conf内の設定:
以前:
ServerName localhost:443
以後:
ServerName nantoka7.com:443
JRE7の場合、SOAPのclientが指定するURLはこの設定と合致しないといけないようです。上記の場合、www.nantoka7.com ではだめで、nantoka7.comである必要があります。
これで私のFileTransferWebServiceもhttps上で動作するようになりました。
以前、SOAPではパスワードがPlain Textで送られるのが問題…というのを読んだことがあります。httpsを使えばその問題はクリアできますね。

 

 

 

 

IWAB0489E Error when deploying Web service to Axis runtime axis-admin failed with {http://xml.apache.org/axis/}HTTP (401)Unauthorized

久しぶりに思い立って、TomcatでWebServiceを追加しようと開発を始めました。
しかし、プロトタイプのコードを作成し、サービスを起動しようとすると以下のエラーで立ち上がりません。
IWAB0489E Error when deploying Web service to Axis runtime
  axis-admin failed with  {http://xml.apache.org/axis/}HTTP (401)Unauthorized
ネットで検索するとAxis2を使えとか、色々出ているのですが、JbossではAxis2が使用できるようですが、TomcatではAxisがdefaultのようで、Axis2を使用するには色々パッケージの追加が必要なようで、そちらも手詰まり。
第一、今回、新規のサービスを一つ追加したとはいえ、以前は問題なくサービスを起動できたわけです。一体何が悪いのか悩んでいて、ついに理由がわかりました。
私のEclipse上でのTomcat用のWebserviceの環境では以前はパスワードなしの環境で開発していましたが、開発の終了後、WebServiceに関してもBasic認証のパスワードを設定していました。この部分の追加がWebServiceの起動に関しても障害となっていたようです。

/security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>UserDatabaseRealm</realm-name>
  </login-config>
  <security-role>
    <role-name>client</role-name>
  </security-role>

エラーメッセージの
 401 Unauthorized
で気がつくべきでした。
Eclipseのバグのような気もしますが、開発時には認証設定を抜いておいたほうがよさそうです。