2015-05-15

ポートスキャン、リモートコード実行、VoIP 攻撃

 先日、連続ネットワークアクセスのログが大量に記録されました。

 こんな感じです。


IP アドレス: 1.20.150.223 (タイ)
ポートスキャン後、連続アクセス。

IPS Prevention Alert: WEB-ATTACKS bash Access, SID: 8920, Priority: Medium -  1.20.150.223, 5313

bash Access とあるので、bash シェルの脆弱性(Shellshock)を狙った攻撃のようです。
 Unix、Linux、Mac OS X をお使いの方は注意が必要ですね。

参考:
bashに存在する「Shellshock」脆弱性についての注意喚起

 そして、この Shellshock 狙いどおり、リモートコード実行試行が10分間で 5700 回以上の連続アクセスが記録されていました。
 攻撃先のポートが 80 (http) だったので、Web サーバ狙いでしょうね。

WEB-ATTACKS Web Application Remote Code Execution 45, SID: 5617, Priority: Medium - 1.20.150.223


IP アドレス: 212.83.136.198 (フランス)

 ポートスキャン後、 連続アクセス。
 過去のレポートを見ていると、先月末からもちょこちょこアクセスしている記録がありますし、この IP アドレスは以前から悪用が報告されているようです。
IPS Prevention Alert: VoIP-ATTACKS SIPVicious Activity 1, SID: 5616, Priority: Medium - 212.83.136.198, 5093

 VoIP で攻撃先のポートが SIP だったので、IP 通話関係の接続確立を試みたようです。



 みなさまもお気を付けください。




2015-04-14

ファイル起動時にFileMakerからMySQLに投げられるクエリ

FileMaker Pro をフロントエンド、MySQLを バックエンドにしたアプリを起動する時には、以下のようなクエリが投げられるんですね。 
(FileMaker Pro 13使用時)

SET NAMES utf8 [参考URL]

SET NAMES indicates what character set the client will use to send SQL statements to the server. Thus, SET NAMES 'cp1251' tells the server, future incoming messages from this client are in character set cp1251. It also specifies the character set that the server should use for sending results back to the client.

A SET NAMES 'charset_name' statement is equivalent to these three statements:
SET character_set_client = charset_name;
SET character_set_results = charset_name;←A
SET character_set_connection = charset_name; 

SET character_set_results = NULL [参考URL]


If you want the server to perform no conversion of result sets or error messages, set character_set_results to NULL or binary:  

SET SQL_AUTO_IS_NULL = 0 [参考URL]

If this variable is set to 1 (the default), then after a statement that successfully inserts an automatically generated AUTO_INCREMENT value, you can find that value by issuing a statement of the following form:
SELECT * FROM tbl_name WHERE auto_col IS NULL
If the statement returns a row, the value returned is the same as if you invoked the LAST_INSERT_ID() function.

つまり、INSERT直後、 AUTO_INCREMENT値は存在するにもかかわらず、IS NULL として認識されるというもろ刃の剣。

SET AUTOCOMMIT=0  [参考URL]

The autocommit mode. If set to 1, all changes to a table take effect immediately. If set to 0, you must use COMMIT to accept a transaction or ROLLBACK to cancel it. By default, client connections begin with autocommit set to 1. If you change autocommit mode from 0 to 1, MySQL performs an automatic COMMIT of any open transaction.

set @@sql_select_limit=DEFAULT  [参考URL]

The maximum number of rows to return from SELECT statements. The default value for a new connection is the maximum number of rows that the server allows per table, which depends on the server configuration and may be affected if the server build was configured with --with-big-tables. Typical default values are (232)–1 or (264)–1. If you have changed the limit, the default value can be restored by assigning a value of DEFAULT.
If a SELECT has a LIMIT clause, the LIMIT takes precedence over the value of sql_select_limit.
sql_select_limit does not apply to SELECT statements executed within stored routines. It also does not apply to SELECT statements that do not produce a result set to be returned to the client. These include SELECT statements in subqueries, CREATE TABLE ... SELECT, and INSERT INTO ... SELECT. 
※うちのDEFAULTは、 (264)–1=18446744073709551615 でした。こんなん返されても困るわ。

SET SQL_MODE='STRICT_ALL_TABLES' [参考URL]

For transactional tables, an error occurs for invalid or missing values in a data-change statement when either STRICT_ALL_TABLES or STRICT_TRANS_TABLES is enabled. The statement is aborted and rolled back.

SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE 'easyinv15' AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE '郵便番号'

INFORMATION_SCHEMA から、アプリで使用さているビューを含むテーブル情報を取得。


select database()

接続中のデータベース名を返す

describe `郵便番号`

当該テーブルのコラム情報を取得

SHOW KEYS FROM `easyinv15`.`郵便番号`

プライマリ等キー情報を取得、Cardinality ってここにあるのね。


SELECT TABLE NAME ~ から SHOW KEYS ~ (イタリック部)は、FileMaker ファイル内に登録されたすべてのMySQLシャドウテーブル(ビュー含む)に対して実行される(キリッ


(土屋) 

2015-02-09

ハードディスクの不良ブロックとメーカーサポート


Windows Server 2008 のイベントログに、イベントID:7、「デバイス \Device\Harddisk0\DR0 に不良ブロックがあります。」が記録されていることに気づいた。普段はでないのだが、毎金曜の真夜中に開始されるフルバックアップを実行する度に出ていた。

ググると、CHKDSK /F を行えとか、ディスクのプロパティを選択して、 ツール→エラーチェック を行え、とか書いてある。 CHKDISK単独ならエラーは出ない。 が、パラメータに /F や /R を付けると、サーバ稼働中は実行できない旨のメッセージが出る。サーバなので、そう簡単には落すわけにはいかぬ。
ネット上には、ハードディスクに問題がある可能性があるので交換したほうが良い、という書き込みも散見された。

ということで、メーカーのDELLのサポートに電話をかけるとすぐに繋がる。 DELLはいろいろ言われているが、"サーバ"のサポートはいつも良い。 担当に現象を説明すると、原因を精査するには、以下の3つの方法(いずれもプログラム)があると言う。
  1. Server Asministrator
  2. DSET
  3. Diagnostics
上記1と3はサーバを一旦は停止しなければならないため、 「2.DSET」(ディーセット、と読むらしい)という診断プログラムを送付してもらい、実行した。終了すると、ZIPファイルが出来上がるので、それを返送する。
夜も更けてきても電話が来ないので、こちらから電話をしてみると別の担当者が出て、送ったファイルを見てもらう。と、即「ディスクに異常がある」とのこと(ふーん、そんな簡単に解るのか!?)で、ディスク交換となった。

なにが言いたいかというと、重要なハードはやはりハード屋に任せるのが良いということ。トラブル発生時、イベントログをチェックし、CHKDSK を行い、ググる、位までのところはなんとかなる。 そこで見当をつけてHDDやらの部品を調達して交換とかも、クライアント機であればなんとかなる。が、ダウンタイムを最小限にしなければならないサーバとなると、ソフト屋には厳しい。オンサイト契約料は高いがケチってはいけないと、今日だけは改めて思ったのだった。


後日談(15/4/14追記)
ハードディスクを交換してもらって10時間位かけてリビルド、しかし上記のエラーは解消されず。
サポートにDSETを再度送ると、「(RAID1の)ディスクが両方壊れている」という。ちょっと待った! いまさらそれは反則だ。もしそうなら、全部再インストールすることになる。 とりあえず、前回交換しなかったもう一方のドライブだけ交換してもらうことになったが、同時に不吉な記事を見つける。

Double Faults and Punctures in RAID Arrays


とっとも厭な予感。いい予感はあたったことはないが厭な予感はとっても良く当たる。
数日後メンテの人が来てもう一方のドライブを交換、当然リビルド=10時間。で、やっぱりエラーは解消されない。 結局、一旦Windows Server Backup を実行し、ディスクを初期化後にリストア。以後2か月強、このエラーは発生していない。


(土屋)


【関連する土屋企画の講習】
FileMaker Server とバックアップ(対象者:中級、5時間×1日)