JBossを狙ったwormにやられてしまいました。
JBossを狙ったwormにやられてしまいました。
侵入されたwormは、どうやらこれのよう。ここに解説があります。
ここに書くことは、私が個人的に調べたことで、必ずしも正しくない場合があります。
アクセスログを見て、HEAD /jmx-console/HtmlAdaptor... のような身に覚えのないリクエストがあり、サーバが200を返していたら、やられている可能性が高いです。サーバのカレントディレクトリ(通常はJBossのbinディレクトリ)に、pnscanとかfly.plのような見慣れないファイルがあるようなら、100%やられています。
jmx-consoleにきちんとユーザ、パスワードを設定していないことが原因で、これにより外部から管理用のWebアプリケーションをデプロイできてしまうようです。上記のページには、きちんとjmx-consoleにユーザ、パスワードを設定する方法が記載されていますが、一度でも侵入されてしまった場合、バックドアアプリケーションがデプロイされてしまっているので、jmx-consoleだけ手当してもwormがどんどん入ってきてしまいます。
基本的にはサーバを綺麗に入れ直すのが良いと思いますが、本稼働中だと、なかなかそうもいかないので、私は以下のようにしました。まずJBossを落とします。jmx-consoleとweb-consoleは使用していなかったので、deploy/jmx-console.war、deploy/management/console-mgr.sarをリネームしました。あと、deploy/managementの下に、idssvc.war、iesvc.war、zecmd.war、zlpwhWeJ.warというディレクトリがあるようであれば削除します。私の場合は特に見つかりませんでしたが、deploy直下に怪しいwarがあるようなら、それも削除(リネーム)します。あと、念のためdeploy/workも削除しておきました。binディレクトリに送りこまれたwormも削除します。これでJBossを立ち上げて、アクセスログを監視し、サーバが200を返しているリクエストに怪しいものが無いことを確認します。とりあえず、うちのサーバはこの対処をしてからは侵入されていないようです。
繰り返しますが、ここに書いた内容は間違っているかもしれませんので、ご注意ください。
Play frameworkでデッドロック その4
こりゃあかん、
framework/src/play/server/ServletWrapper.java
private void copyStream(HttpServletResponse servletResponse, InputStream is) throws IOException {
OutputStream os = servletResponse.getOutputStream();
byte[] buffer = new byte[8096];
int read = 0;
while ((read = is.read(buffer)) > 0) {
os.write(buffer, 0, read);
}
os.flush();
is.close();
}
というわけで修正。
private void copyStream(HttpServletResponse servletResponse, InputStream is) throws IOException {
try {
OutputStream os = servletResponse.getOutputStream();
byte[] buffer = new byte[8096];
int read = 0;
while ((read = is.read(buffer)) > 0) {
os.write(buffer, 0, read);
}
os.flush();
}
finally {
try {
is.close();
}
catch (IOException e) {
Logger.error("Cannot close input stream.", e);
}
}
}
このパッチ当てておけば、とりあえず、warで実行する限りは問題なくなった。
こちらもバグ報告しておいた。





