プログラムブログ

PHP、Database、ネットワーク、サーバセキュリティ

デバイス関連

・シリアルデバイス
setserialコマンド  例. setserial /dev/ttyS1 irq3
I/Oアドレスとシリアルデバイスの対応関係を表示する。

[root@vmcent5 ~]# setserial -g /dev/ttyS1
/dev/ttyS1, UART: 16550A, Port: 0×02f8, IRQ: 3

・USBデバイス
デバイスコントローラとドライバの関係
UHCI (USB1.1)  usb-uhci.o
OHCI(USB1.1)   usb-ohci.o
EHCI(USB2.0)   ehci-hcd.o
どのUSBコントローラを使用しているかはdmesgコマンド、lspciコマンドで確認できる。

・USBモジュールのロード
modprobeコマンド   例. modprobe usb-uhci

・USBデバイス情報の表示
lsusbコマンド( -t:ツリー状表示   -v:詳細表示)

[root@vmcent5 ~]# lsusb
Bus 001 Device 001: ID 0000:0000

[root@vmcent5 ~]# lsusb -v

Bus 001 Device 001: ID 0000:0000
Device Descriptor:
bLength                18
bDescriptorType         1
bcdUSB               1.10
bDeviceClass            9 Hub
bDeviceSubClass         0 Unused
bDeviceProtocol         0 Full speed (or root) hub
bMaxPacketSize0        64
idVendor           0×0000
idProduct          0×0000
bcdDevice            2.06
iManufacturer           3 Linux 2.6.18-92.1.6.el5 uhci_hcd
iProduct                2 UHCI Host Controller
iSerial                 1 0000:00:07.2
bNumConfigurations      1
Configuration Descriptor:
bLength                 9
bDescriptorType         2
wTotalLength           25
bNumInterfaces          1
bConfigurationValue     1
iConfiguration          0
bmAttributes         0xe0
Self Powered
Remote Wakeup
MaxPower                0mA
Interface Descriptor:
bLength                 9
bDescriptorType         4
bInterfaceNumber        0
bAlternateSetting       0
bNumEndpoints           1
bInterfaceClass         9 Hub
bInterfaceSubClass      0 Unused
bInterfaceProtocol      0 Full speed (or root) hub
iInterface              0
Endpoint Descriptor:
bLength                 7
bDescriptorType         5
bEndpointAddress     0×81  EP 1 IN
bmAttributes            3
Transfer Type            Interrupt
Synch Type               None
Usage Type               Data
wMaxPacketSize     0×0002  1x 2 bytes
bInterval             255
Hub Descriptor:
bLength               9
bDescriptorType      41
nNbrPorts             2
wHubCharacteristic 0×000a
No power switching (usb 1.0)
Per-port overcurrent protection
bPwrOn2PwrGood        1 * 2 milli seconds
bHubContrCurrent      0 milli Ampere
DeviceRemovable    0xc0
PortPwrCtrlMask    0xd6
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power

・USBデバイスが利用しているカーネルモジュールの表示
usbmodules

vmware版centos5にはusbmodulesコマンドはなかった

No comments

/proc配下のファイル

/proc配下のファイルについてのメモ

/proc/interrupts
IRQ番号の割り当て

[root@vmcent5 ~]# cat /proc/interrupts
CPU0
0:     609691    IO-APIC-edge  timer
1:        293    IO-APIC-edge  i8042
6:          5    IO-APIC-edge  floppy
7:          0    IO-APIC-edge  parport0
8:          1    IO-APIC-edge  rtc
9:          0   IO-APIC-level  acpi
12:      21107    IO-APIC-edge  i8042
15:      10277    IO-APIC-edge  ide1
169:          0   IO-APIC-level  uhci_hcd:usb1, Ensoniq AudioPCI
177:      25685   IO-APIC-level  ioc0
185:       1068   IO-APIC-level  eth0
NMI:          0
LOC:     609664
ERR:          0
MIS:          0

/proc/ioports
I/Oアドレスの割り当て

[root@vmcent5 ~]# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
02f8-02ff : serial
0376-0376 : ide1
0378-037a : parport0
03c0-03df : vga+
03f2-03f5 : floppy
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
1000-103f : 0000:00:07.3
1000-103f : motherboard
1000-1003 : ACPI PM1a_EVT_BLK
1004-1005 : ACPI PM1a_CNT_BLK
1008-100b : ACPI PM_TMR
100c-100f : ACPI GPE0_BLK
1010-1015 : ACPI CPU throttle
1040-104f : 0000:00:07.3
1040-104f : motherboard
1050-105f : 0000:00:07.1
1058-105f : ide1
1060-107f : 0000:00:07.2
1060-107f : uhci_hcd
1080-10ff : 0000:00:10.0
1400-147f : 0000:00:11.0
1400-141f : pcnet32_probe_pci
1480-14bf : 0000:00:12.0
1480-14bf : Ensoniq AudioPCI
14c0-14cf : 0000:00:0f.0

/proc/dma
DMAチャネルの割り当て。DMA(Direct Memory Access)チャネルはCPUを使わずにデバイスとメインメモリとの間で高速なデータ通信を行うために使う。

[root@vmcent5 ~]# cat /proc/dma
2: floppy
4: cascade

/proc/scsi/scsi
SCSI接続されているデバイスの情報
scsi_infoコマンドを使ってもSCSI情報を表示できる。 例. scsi_info /dev/scd0

[root@vmcent5 ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: VMware,  Model: VMware Virtual S Rev: 1.0
Type:   Direct-Access                    ANSI SCSI revision: 02

vmware版centos5ではscsi_infoコマンドはなかった。

/proc/pci
PCIデバイス情報
lspciコマンドでも見れる

vmware版centos5では/proc/pciはない。

[root@vmcent5 ~]# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (
rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (re
v 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0f.0 VGA compatible controller: VMware Inc Abstract SVGA II Adapter
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-
MPT Dual Ultra320 SCSI (rev 01)
00:11.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
(rev 10)
00:12.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 02)

lsdevコマンドで、デバイスごとのDMA、IRQ、I/Oアドレスを一覧表示することができる。
vmware版centos5ではlsdevコマンドはなかった。

No comments

DNSキャッシュポイゾニング対策

巷で話題になっているDNSキャッシュポイゾニング。そもそもはDNSの仕様の問題なので根本的解決はできないのだが、被害にあう可能性を低減する対策を自分のbindに施した。

・DNSパケットの中に含まれる識別IDのランダム性を高める
-> bindのバージョンアップ

・ソースポートのランダム化を行う
-> named.confの query-source の port 53 を port * に変更

設定ミスをしていないかテストサイトで確認。

Source Port Randomness、Transaction ID Randomness ともにGREATと表示され、設定が反映されていることを確認できた。

No comments

courier-imapではまる

新しくインストールしたマシン(FreeBSD)にcourier-imap 4.3.1をインストールしたときに設定ではまったので、自分用のメモとして残しておく。

courier-authlibの認証設定をおこない、Courier-imapに接続しようとすると次のエラーになる。

Account’s mailbox directory is not owned by the correct uid or gid

メーラから接続しても、手動で次のコマンドをたたいても同様。

telnet IP 143
0000 CAPABILITY
0001 LOGIN “ユーザ名” “パスワード”

いろいろ調べたところ、 Maildirのuidとgidが/etc/passwdと一致していないことが原因のようだ。
今まで特に気にせず正常動作しているサーバが何台かあるのだが、uidとgidが/etc/passwdと一致していたためエラーがでていなかったよう だ。今回はなぜか/etc/passwdに記載しているgidと、Maildirのgidが異なっていたためエラーになった。

結局 Maildir以下をchgrp して解決。

ちなみにソースコードではimapd.cのこのあたりでそのチェックを行っている。

if (atoi(p))
{
if ( buf.st_uid != geteuid() ||
buf.st_gid != getegid())
write_error_exit("Account's mailbox directory is not owned by the correct uid or gid");
}
No comments

ratproxyを試してみた

Googleから新しく提供されたWebアプリケーションセキュリティチェックツール ratproxy を試してみた。

まずはここからダウンロードしCentOS5(vmware)にもってきた。

$tar xvzf ratproxy-1.51.tar.gz で解凍

$make を実行したところ次のエラー

cc ratproxy.c -o ratproxy  -Wall -O3 -Wno-pointer-sign -D_GNU_SOURCE http.c mime.c ssl.c -lcrypto -lssl
ratproxy.c:43:25: error: openssl/md5.h: そのようなファイルやディレクトリはありません
http.c:42:25: error: openssl/md5.h: そのようなファイルやディレクトリはありません
http.c: In function ‘checksum_response’:
http.c:1329: error: ‘MD5_CTX’ undeclared (first use in this function)
http.c:1329: error: (Each undeclared identifier is reported only once
http.c:1329: error: for each function it appears in.)
http.c:1329: error: expected ‘;’ before ‘ctx’
http.c:1339: 警告: implicit declaration of function ‘MD5_Init’
http.c:1339: error: ‘ctx’ undeclared (first use in this function)
http.c:1340: 警告: implicit declaration of function ‘MD5_Update’
http.c:1341: 警告: implicit declaration of function ‘MD5_Final’
mime.c:39:25: error: openssl/md5.h: そのようなファイルやディレクトリはありません
ssl.c:38:25: error: openssl/ssl.h: そのようなファイルやディレクトリはありません
ssl.c:39:25: error: openssl/err.h: そのようなファイルやディレクトリはありません
ssl.c: In function ‘ssl_start’:
ssl.c:107: error: ‘SSL_CTX’ undeclared (first use in this function)
ssl.c:107: error: (Each undeclared identifier is reported only once
ssl.c:107: error: for each function it appears in.)
ssl.c:107: error: ‘cli_ctx’ undeclared (first use in this function)
ssl.c:107: error: ‘srv_ctx’ undeclared (first use in this function)
ssl.c:107: 警告: カンマ演算子の左側の式に効力がありません
ssl.c:108: error: ‘SSL’ undeclared (first use in this function)
ssl.c:108: error: ‘cli_ssl’ undeclared (first use in this function)
ssl.c:108: error: ‘srv_ssl’ undeclared (first use in this function)
ssl.c:108: 警告: カンマ演算子の左側の式に効力がありません
ssl.c:109: error: ‘BIO’ undeclared (first use in this function)
ssl.c:109: error: ‘err’ undeclared (first use in this function)
ssl.c:137: 警告: implicit declaration of function ‘SSL_library_init’
ssl.c:138: 警告: implicit declaration of function ‘SSL_load_error_strings’
ssl.c:140: 警告: implicit declaration of function ‘BIO_new_fp’
ssl.c:140: error: ‘BIO_NOCLOSE’ undeclared (first use in this function)
ssl.c:141: 警告: implicit declaration of function ‘SSL_CTX_new’
ssl.c:141: 警告: implicit declaration of function ‘SSLv23_client_method’
ssl.c:142: 警告: implicit declaration of function ‘SSLv23_server_method’
ssl.c:144: 警告: implicit declaration of function ‘ERR_print_errors’
ssl.c:146: 警告: implicit declaration of function ‘SSL_CTX_use_certificate_chain_file’
ssl.c:149: 警告: implicit declaration of function ‘SSL_CTX_use_PrivateKey_file’
ssl.c:149: error: ‘SSL_FILETYPE_PEM’ undeclared (first use in this function)
ssl.c:152: 警告: implicit declaration of function ‘SSL_new’
ssl.c:157: 警告: implicit declaration of function ‘SSL_set_fd’
ssl.c:158: 警告: implicit declaration of function ‘SSL_connect’
ssl.c:162: 警告: implicit declaration of function ‘SSL_accept’
ssl.c:190: 警告: implicit declaration of function ‘SSL_read’
ssl.c:221: 警告: implicit declaration of function ‘SSL_write’
make: *** [ratproxy] エラー 1

どうやらopenssl-develがはいっていないことが原因のようだ。openssl-develをインストールして再度make。

$ make
cc ratproxy.c -o ratproxy  -Wall -O3 -Wno-pointer-sign -D_GNU_SOURCE http.c mime.c ssl.c -lcrypto -lssl

あっさり終了。

次にratproxyを起動する。

いろいろオプションがあるのだが、まずは次のオプションで実行。(オプションについての説明はこのページ)

$ ./ratproxy -w log -lfscm

[!] WARNING: Running with no ‘friendly’ domains specified. Many cross-domain
checks will not work. Please consult the documentation for advice.

[*] Proxy configured successfully. Have fun, and please do not be evil.
[+] Accepting connections on port 8080/tcp (local only)..

ドメイン指定していないのでWARNINGがでたがとりあえずこのまま動かす。
netstatで確認すると、127.0.0.1:8080 が稼働している。

ratproxyを動かしているマシン上でWebブラウザを起動し、プロキシをlocalhost:8080/tcp に設定する。

Webブラウザでチェックしたいサイトにアクセスする。ある程度アクセスしたところでいったん ratproxyを停止。

結果のログを出力する。
./ratproxy-report.sh log > report.html

report.htmlを確認するとこんな感じ。

本当はPassive test ではなくて、Active Testの挙動を見たいのだが、今日は長くなったのでここまで。とりあえず動作することを確認したということで。

No comments

HP Scrawlrを試してみた

マイクロソフトがSQLインジェクション対策のツールを公開した。その中のひとつ、HP Scrawlrを試してみた。
このツールはリモートからWebサーバに接続し、SQLインジェクションの脆弱性が存在しないかチェックするツール。

しかし、かなり機能を制限しているようだ。GETには対応しているがなんとPOSTには対応していない。POSTのページに対してチェック用の値を投げないのだ。
つまりPOSTで書かれたWebアプリはチェックされない。。。。

ちなみに、GETの場合には次のような値を投げてチェックを実施している。

‘+OR
‘+AND+5%3d5+OR+
‘+AND+5%3d5+OR+’s’%3d’0
+OR+5%3d5+OR+4%3d0

個人的にはParosの方がかなり上。

No comments

Google Code University - Web Security

googleは大学生向けにIT関連スペシャリストの講演をビデオ化し公開しているのだが、Web Securityが結構おもしろいので紹介する。

How to Break Web Software というタイトルで Mike Andrews が大学生に講演している。
彼はファウンドストンで働いており、同名の著書があるので、おそらく著書の内容を中心に説明しているのではないかと思われる。

若干英語は聞き取りにくい….
以前はイギリスで教授をやっていたとのでイギリス英語なのか?どちらかというとオーストラリアっぽく聞こえるが。

No comments

FreeBSDのバージョンアップ(5.5 -> 6.3)

FreeBSD5.5のサポートが2008年5月末で切れたので、5.5から6.3にアップしたの。作業内容を忘れないようにメモ。

バージョンアップの作業は、5.1->5.5のときと基本的に作業の流れは一緒。

まずは、HDDごとコピーをとって万一の場合のバックアップを作成。

次に/usr/src と /usr/ports を別ディレクトリに移動。

mv /usr/src /var/backup/src5.5
mv /usr/ports /var/backup/ports5.5

5.5から6系にあげる変更点として/etc/groupの追加があったので audit:*:77: を記述。

続いて /etc/fstab を開いてマウント情報をメモ。

これで準備ができたので、FreeBSD6.3のインストールCDからシステムを起動。
インストールを選択し、UPGRADEを選ぶ。

ディスクラベルエディタでmを押して各マウント位置を記入。(/etc/fatabのメモ)

続いて設定ファイルのバックアップ。/etcの内容をどこにバックアップしますか?と聞かれてデフォルト設定の/var/tmp/etc のままOKを押すと、次のエラーになった。

unable to backup your /etc/ into /var/tmp/etc. Do you want to continue anyway?

う~ん、なんでエラーになるのかわからない。。。
とりあえず/var/tmp/etc 配下をすべてrmして空っぽにしてから再度インストーラーを起動すると今度はうまくいった。原因はよくわからないがとりあえずよしとする。

6.3のカーネルコピー自体は10分弱で完了。インストーラを終了する前に Alt+F4してコマンド入力画面にする。
#mergemaster を実行して /etc ファイルのマージ作業。
1ファイルずつ聞かれるので、途中から疲れてきて適当にマージした。

そして再起動すると….
エラーでうまく起動しない…. コマンドをたたけない….
/etcファイルのマージに失敗したようだ….

仕方ないので、バックアップディスクを利用して元の5.5の状態に戻し再チャレンジ。

6.3系のカーネルコピーが終わった段階で、今度はmergemasterを慎重に実施。

#mergemaster -siva して新ファイルがある場合は追加。
#mergemaster -sivr してマージする必要があるファイルはマージ。

これで再起動すると6.3系が起動した。

ただしPostgreSQLは起動に失敗。まぁ5.5から6.3にあげたのでライブラリがらみでアプリにエラーがでるのは予想していたので、PostgreSQLだけなら少ない方だ。apache,postfixが動いてくれたのは助かった。

#portupgrade -a

でソフトは全部バージョンアップで作り直し。(4,5時間かかった)

完了後システムを再起動。すると、PostgreSQLはまだエラー。
エラー内容を見るとsharedmemoryの容量が…とかいてある。設定ファイル(postgresql.conf)でshared_buffersを32MBから16MBに変更すると無事起動。なんだライブラリがらみのエラーではなかったのか…

これで完了かと他のソフトをチェックするとimapに接続できない。。。。どうも認証がらみで即切られている。なんだろう….

調べた結果、authdaemondが起動していないぽい。/etc/rc.confにcourier_authdaemond_enable=”YES”を記入して対処完了。いままでは書いてなくても起動していたのだが、バージョンアップで仕様が変わったのだろうか。。。

とりあえずバージョンアップ完了。まる1日作業だった。

No comments

centOS5でIPv6を無効化

centOS5系でIPv6を無効にしようとしてちょっとはまったので自分用メモ。

1. /etc/sysconfig/networkで NETWORKING_IPV6=no にする
2. /etc/modprobe.confで alias net-pf-10 off を記述
(はじめはかわりに alias ipv6 off と書いていたのだがこれでは無効にならなかった)
3. システム再起動

確認の仕方(どれでもよい)

・ifconfig してIPv6のアドレスが表示されていないか
・netstat -an でIPv6のアドレスが表示されていないか
・lsmod |grep ipv6 して何も表示されないか

No comments

windowsのDNSリゾルバ・キャッシュ

Windowsを利用しているときに、とあるFQDNのIPアドレスを引くと一時的に間違ったDNS情報を取得してしまった。それがwindowsのキャッシュに残っているために、以降FirefoxでそのFQDNにアクセスしようとすると間違ったIPアドレスを利用しており接続できなくなった。
仕方ないのでDNSのリゾルバキャッシュを消去する方法を調べた。

まずは現状のキャッシュ内容を確認するコマンド。
ipconfig /displaydns

キャッシュを消去するコマンド
ipconfig /flushdns

No comments

« 前ページへ次ページへ »