Sublime Package:Install Package が失敗するとき
以下のメッセージが出るときの対処法
Package Control: There are no packages available for installation.
Preferences > Package Settings > Package Control > Settings - User に以下を追加
{
"repository_channels": [
"http://sublime.wbond.net/repositories.json"
]
}
遠隔操作事件におけるセキュリティ攻撃まとめ
2012年に起きた遠隔操作ウイルスおよびクロスサイト・リクエスト・フォージェリによる連続威力業務妨害等事件[1]において、犯人が行ったセキュリティ攻撃を個人的にまとめます。
クロスサイト・リクエスト・フォージェリ
概要
- HTTPリクエストを偽装(フォージェリ)する攻撃
- Webサイト訪問者が意図しない、別のWebサイトへのリクエストを送信する
- JavaScriptを用いた手法
- Webサイトを訪れた瞬間などに、任意の文字が埋められたフォームをPOSTする
- imgタグを用いた手法
- imgタグのsrcに任意のURIを指定してGETリクエストを送信する
- JavaScriptを用いた手法
実際に行われた攻撃手順
2ちゃんねるの「OCN規制被害者の会 2006年目」というスレッドに以下が投稿される[5]
小ネタですが...
http://is.gd/STDcf0このURIへアクセスすると、犯罪予告を自動で書き込むJavaScriptコードが組み込まれたURI http://fragt.freezoy.com/?key=y01[1] へリダイレクトされる
- 横浜市のWebページに犯罪予告が投稿される
遠隔操作
- クロスサイト・リクエスト・フォージェリが用いられた事件は1件のみで、それより後の犯罪予告はすべて遠隔操作によって行われた[1][2][3]
- 犯人は遠隔操作ウイルスの画面キャプチャ機能を用いてウイルス感染者のPC画面を観察していた[2][3]
- 画面キャプチャからウイルス感染者の居住地が特定されたケースでは、それが犯罪予告に反映された[2][3]
- プログラム名は「iesys.exe」[1]
- トレンドマイクロ社は「BKDR_SYSIE.A」、シマンテック社は「Backdoor.Rabasheeta」と遠隔操作ウイルスを命名し、それぞれ解析情報を公開している
- シマンテック社が用いたの「Rabaseeta」という言葉は、遠隔操作の命令コマンドが書き込まれた「したらば掲示板」が由来
iesys.exeの挙動
- Windows起動時に自分自身を起動するようにレジストリを変更する[6][7]
- したらば掲示板へ書き込まれたコマンドを読みに行く(おそらく定期的に掲示板へアクセスすると思われる)[6][7]
- コマンドを実行
iesys.exeの機能[6]
- スクリーンショットの取得
- ファイルのダウンロード
- ファイルのアップロード
- ファイルおよびフォルダの列挙
- ファイルの実行
- デフォルトのインターネットブラウザの取得
- 隠しブラウザで特定のURLを操作および開く
- ユーザのキー入力操作情報およびマウスの操作の記録
- 自身のアップデート
- 環境設定ファイルの更新
- 利用した掲示板のスレッドの更新
- コンピュータを一定の時間スリープする
- コンピュータから自身を削除する
実際に行われた攻撃手順
- 2ちゃんねるの「シベリア郵便局」に代行書き込みの依頼がされる[1]
- 「シベリア郵便局」とは、2ちゃんねるにおける書き込み規制を回避するために、目的のスレッドへの書き込みを他人に依頼するためのシステムの名称
- 2ちゃんねるの「【ソフトウェア】気軽に「こんなソフトありませんか?」 」スレッドに遠隔操作ウイルスが内在するファイルをダウンロードできるURIが投稿される[5]
- ファイルはDropboxやAxfc Uploaderへ置かれた
- スレッド内のリクエストに応える形でファイルのダウンロードを誘導した
>>826
ピッタリのがあった
クリップボード監視君
http://dl.dropbox.com/u/99190777/CBUtil.zip
- ファイルをダウンロードさせウイルスに感染させる
- したらば掲示板を通じて任意のコマンドが実行され、ウイルス感染者の情報が収集される
- 任意のコマンドによって犯罪予告の投稿が行われる
Reference
[Java] public static final を使わない方がいい理由
public static final で定義した変数は、コンパイル時に呼び出した場所へインライン展開されるから。定数の値を再設定してそのファイルだけを再コンパイルした場合、定数を呼び出す側のファイルは以前の定数を使用したままになる。
private static final で定義した場合 (推奨)
private static final int VERSION = 10;
public static int getVersion() {
return VERSION;
}
Main.java
Integer apiVersion = Api.getVersion();
Main.classをデコンパイル
Integer apiVersion = Integer.valueOf(Api.getVersion());
public static final で定義した場合 (非推奨)
public static final int VERSION = 10;
Main.java
Integer apiVersion = Api.VERSION;
Main.classをデコンパイル
Integer apiVersion = Integer.valueOf(10);
Reference
HerokuのPostgreSQLをpgAdminから見る方法
すこしハマったので。
PostgreSQLを追加する
heroku addons:add heroku-postgresql:dev
PostgreSQL接続情報を確認する
heroku config
これで出てきたURLを以下のように読みます。
postgres://<Username>:<Password>@<Host>:<Port>/<DB Name>
pgAdminからサーバに接続
左上の接続アイコンから、Username, Password, Host, Port, Maintenance DB(= DB Name) と Name(適当) を入力してOKボタンを押せば接続できるはずです。
自分のDBを探す
DBが大量に表示されるので、自分の DB Name を探します。
Webサイトの更新を捕まえるRubyスクリプトを書きました
不定期にイベント情報が更新されるWebサイトがあるのですが、いつも見逃してしまうので今年こそは見逃さないようにスクリプトを書きました。
特定URIのHTMLを定期的に取得して、前回のHTMLと比較して追加分だけを抽出し、設定したワードが書き込まれていたらメールを送信します。
github: https://github.com/mishimadesign/cormorant
- config.yamlに送信元のメール設定と、監視するURIと探すワードと送信先メールアドレスを設定します。監視対象はいくつでも設定可能です。ワードは正規表現です。
- HTML取得間隔をclock.rbに設定します。1.hourのところを10.seconds, 3.minutes, 1.dayなどに変更できます(詳しくは https://github.com/adamwiggins/clockwork )。
- Herokuへアップロードします(詳しくは http://www.ownway.info/Ruby/index.php?heroku%2Fhelloclockwork )。または、bundleが実行できる環境で"bundle install"してforemanが実行できる環境で"foreman start"で実行。
- uri: http://www.ntv.co.jp/kinro/lineup/ word: カリオストロの城|天空の城ラピュタ|となりのトトロ|火垂るの墓|魔女の宅急便|おもひでぽろぽろ|紅の豚|平成狸合戦ぽんぽこ|耳をすませば|もののけ姫|となりの山田くん|千と千尋の神隠し|猫の恩返し|ハウルの動く城|ゲド戦記|崖の上のポニョ|借りぐらしのアリエッティ|コクリコ坂から|風立ちぬ|かぐや姫の物語 mail: example@gmail.com
デジタル署名についてのメモ
MVCの本質
MVCの古典的定義を読んで思ったこと。
MODELS - VIEWS - CONTROLLERS
http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
モデル・ビュー・コントローラ - Trygve Reenskaug
http://d.hatena.ne.jp/digitalsoul/20100913/1284330448
Model, View, Controllerそれぞれの依存関係が重要なのだと思いました。
今までMVCとは、Modelがどの範囲までカバーしているのかとか、Controllerは何をするのかとか、そういった役割についての定義だと思っていました。M,V,Cそれぞれの役割についてはさまざまな解釈があり、どれが正しいのかを判断する客観的な指標がありません(あるいはどれを正しいとしても問題ない)。
しかし、依存関係ありきで考えるとおのずとそれぞれの役割も定まることに気が付きました。
MはVもCも知らない。なのでModelは、単純に対象を表したオブジェクトになる。
VはCを知らずMを知っているので、Mのデータを視覚的に表すためのオブジェクトになる。
CはユーザのインプットをMやVに反映させる。
DBデータなどはCでとってきてMに入れてVにわたすのがいいのかな。