วันจันทร์ที่ 20 กันยายน พ.ศ. 2553

SNMP : ตัวอย่างการเรียกดูข้อมูลของเครื่องเป้าหมายผ่าน Protocol SNMP

ในกรณีที่เราเปิดการใช้งาน SNMP ไว้ แต่ไม่มีการป้องกันการเข้าถึงนั้น อาจทำเป็นช่องโหว่ทำให้ผู้บุกรุกเข้ามาหาข้อมูลเพื่อบุกรุกเครื่องเราได้ (FootPrinting) ดังตัวอย่าง

กำหนดให้

Target OS : Microsoft Windows 7
HostName = MSW-server
snmp-community string = MyServer

Hacker OS : Ubuntu 9.10
HostName = hacker-server


hacker-server$ snmwalk -v 2c -c MyServer MSW-server system

SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 72 Stepping 2 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7600 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1013543) 2:48:55.43
SNMPv2-MIB::sysContact.0 = STRING: admin@MSW-server
SNMPv2-MIB::sysName.0 = STRING: Windows-Server
SNMPv2-MIB::sysLocation.0 = STRING: Secure, IDC
SNMPv2-MIB::sysServices.0 = INTEGER: 79

จากตัวอย่างข้างต้นจะเห็นว่า สามารถเรียกดูข้อมูลของ OS ได้ จากนั้นลองทดสอบเรียกดูว่าเครื่องเป้าหมายติดตั้งโปรแกรมอะไรบ้าง

hacker-server$ snmpwalk -v 2c -c MyServer MSW-server SWInstalledName
HOST-RESOURCES-MIB::hrSWInstalledName.1 = STRING: "Vuze"
HOST-RESOURCES-MIB::hrSWInstalledName.2 = STRING: "Adobe AIR"
HOST-RESOURCES-MIB::hrSWInstalledName.3 = STRING: "Adobe Flash Player 10 ActiveX"
HOST-RESOURCES-MIB::hrSWInstalledName.4 = STRING: "Adobe Flash Player 10 Plugin"
HOST-RESOURCES-MIB::hrSWInstalledName.5 = STRING: "aMSN 0.98.3"
HOST-RESOURCES-MIB::hrSWInstalledName.6 = STRING: "avast! Free Antivirus"
HOST-RESOURCES-MIB::hrSWInstalledName.7 = STRING: "BitComet 0.70"
HOST-RESOURCES-MIB::hrSWInstalledName.8 = STRING: "Cisco Packet Tracer 5.3"
HOST-RESOURCES-MIB::hrSWInstalledName.9 = STRING: "Foxit Reader"
HOST-RESOURCES-MIB::hrSWInstalledName.10 = STRING: "GNS3 0.7.2"
HOST-RESOURCES-MIB::hrSWInstalledName.11 = STRING: "K-Lite Mega Codec Pack 5.9.0"
HOST-RESOURCES-MIB::hrSWInstalledName.12 = STRING: "Microsoft .NET Framework 4 Client Profile"
HOST-RESOURCES-MIB::hrSWInstalledName.13 = STRING: "Microsoft Visual J# 2.0 Redistributable Package - SE"

จากผลลัพธ์จะเห็นว่า สามารถแสดงรายชื่อ Software ที่อยู่บนเครื่องเป้าหมายได้
ดังนั้นในการใช้งาน SNMP ควรมีการป้องกันระบบให้ดี

FreeBSD, MRTG : การติดตั้ง MRTG เพื่อดูปริมาณการใช้งาน Network Traffic

ระบบที่ใช้

OS : FreeBSD 8.1 amd64

เริ่มด้วยการติดตั้ง snmpd ก่อน

server# cd /usr/ports/net-mgmt/net-snmp
server# make install
server# rehash

สร้างไฟล์ Configuration ของ SNMP

server# mkdir /etc/snmp
server# echo "rocommunity myServer" > /etc/snmp/snmpd.conf

เพิ่มบรรทัดต่อไปนี้เข้าไปใน /etc/rc.conf

snmpd_enable="YES"
snmpd_conffile="/etc/snmp/snmpd.conf"

สั่ง start SNMP โดย

server# /usr/local/etc/rc.d/snmpd start

ทดสอบการใช้งาน SNMP โดย

server# snmpwalk -v 2c -c myServer 127.0.0.1

ถ้าได้ output ที่ไม่ใช่ Error ออกมาก็เป็นอันใช้ได้

ต่อไปติดตั้ง MRTG

server# cd /usr/ports/net-mgmt/mrtg
server# make install
server# rehash

จากนั้นทำการสร้าง MRTG Configuration file ดังนี้

server# cfgmaker --global 'WorkDir: /www/mrtg' \
--global 'Options[_]: growright,bits' \
--output /usr/local/etc/mrtg/127.0.0.1.cfg \
myServer@127.0.0.1

หลังจากได้ Configuration file แล้ว ก็ทำการสั่งให้ MRTG ไปเก็บค่า snmp ตามที่ต้องการ ดังนี้

server# mrtg /usr/local/etc/mrtg/127.0.0.1.cfg

ทั้งนี้ เนื่องจากเป็นการใช้งานครั้งแรก อาจมี error อยู่ ซึ่งอาจต้องสั่งซ้ำๆ 2-3 ครั้ง เพื่อให้ error หมดไป ซึ่งเมื่อ error หมดไปแล้ว จะได้ output ไปอยู่ที่ /www/mrtg ตามที่ได้กำหนดไว้ในขั้นสร้างไฟล์ Configuration ซึ่งจะเรียกดู output ผ่าน web browser ตามปกติ

จากนั้นกำหนดให้ MRTG ทำงานทุกๆ 5 นาที โดยไปกำหนดที่ /etc/crontab ดังนี้

*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/127.0.0.1.cfg

วันพฤหัสบดีที่ 2 กันยายน พ.ศ. 2553

Linux, Network : เปลี่ยนชื่อ Network Interface

ในกรณีที่ใช้ Linux มาทำเป็น Firewall นั้น บางทีจะอยากจะเปลี่ยนชื่อของ Network Interface ให้ตรงกับ Zone ในใช้งาน เพื่อให้ง่ายในการจดจำ ในกรณีที่มีหลาย Interface เช่น จากเดิม eth0 ก็ไปเป็น wan เป็นต้น

ระบบที่ทดสอบ

OS : Ubuntu Linux 10.04.1 LTS

กำหนดให้
eth0 --> wan
eth1 --> lan
eth2 --> wireless
eth3 --> dmz

ระบบเดิม
root@server:~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:14:22:15:eb:ed
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xccc0 Memory:df8e0000-df900000

eth1 Link encap:Ethernet HWaddr 00:14:22:15:eb:ee
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xbcc0 Memory:df6e0000-df700000

eth2 Link encap:Ethernet HWaddr 00:01:02:58:ed:ca
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:37 Base address:0xc00

eth3 Link encap:Ethernet HWaddr 00:04:76:21:ac:96
inet addr:172.17.12.55 Bcast:172.17.12.255 Mask:255.255.255.0
inet6 addr: fe80::204:76ff:fe21:ac96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:359 errors:0 dropped:0 overruns:1 frame:0
TX packets:173 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33463 (32.6 KB) TX bytes:22815 (22.2 KB)
Interrupt:39 Base address:0xec00

ขั้นตอนการเปลี่ยน
ให้แก้ไขที่ไฟล์ /etc/udev/rules.d/70-persistent-net.rules โดยก่อนการแก้ไข ควร backup ไฟล์นี้ไว้ก่อน

root@server:/etc/udev/rules.d# cp 70-persistent-net.rules 70-persistent-net.rules.backup

จากนั้นมาดูเนื้อหาในไฟล์นี้ก่อนว่ามีอะไรน่าสนใจบ้าง

root@server:/etc/udev/rules.d# cat 70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ed", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:02:58:ed:ca", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:04:76:21:ac:96", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"


จาก output จะเห็นว่า จะมีการ map หมายเลขของ MAC address เช่น ATTR{address}=="00:04:76:21:ac:96" ---> NAME="eth3"
ซึ่งเราจะมาทำการแก้ตรงนี้แหละ

root@server:/etc/udev/rules.d# vi 70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ed", ATTR{type}=="1", KERNEL=="eth*", NAME="wan" <--- แก้เป็น wan จากเดิม eth0

# PCI device 0x8086:0x1076 (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:14:22:15:eb:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="lan" <--- แก้เป็น lan จากเดิม eth1

# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:02:58:ed:ca", ATTR{type}=="1", KERNEL=="eth*", NAME="wireless" <--- แก้เป็น wireless จากเดิม eth2

# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:04:76:21:ac:96", ATTR{type}=="1", KERNEL=="eth*", NAME="dmz" <--- แก้เป็น dmz จากเดิม eth3

จากนั้นให้ทำการแก้ไข network configuration เพื่อให้รู้จักชื่อ Interface ใหม่

root@server# vi /etc/network/interfaces

auto lo
iface lo inet loopback

# The primary network interface
auto dmz <--- แก้เป็น dmz จากเดิม eth3
iface dmz inet static <--- แก้เป็น dmz จากเดิม eth3
address 172.17.12.55
netmask 255.255.255.0
gateway 172.17.12.1


เมื่อตรวจสอบเรียบร้อยแล้ว ก็ reboot เครื่อง
และเมื่อเครื่อง boot เสร็จแล้ว ก็ทำการตรวจสอบผลงานซะหน่อย

root@server:/# ifconfig -a
dmz Link encap:Ethernet HWaddr 00:04:76:21:ac:96
inet addr:172.17.12.55 Bcast:172.17.12.255 Mask:255.255.255.0
inet6 addr: fe80::204:76ff:fe21:ac96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3135 errors:0 dropped:0 overruns:1 frame:0
TX packets:1038 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:317387 (309.9 KB) TX bytes:171021 (167.0 KB)
Interrupt:39 Base address:0xcc00

lan Link encap:Ethernet HWaddr 00:14:22:15:eb:ee
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xbcc0 Memory:df6e0000-df700000

wan Link encap:Ethernet HWaddr 00:14:22:15:eb:ed
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0xccc0 Memory:df8e0000-df900000

wireless Link encap:Ethernet HWaddr 00:01:02:58:ed:ca
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:37 Base address:0xec00

root@server:/# ethtool dmz

Settings for dmz:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 24
Transceiver: internal
Auto-negotiation: on
Current message level: 0x00000001 (1)
Link detected: yes

ทดสอบด้วย iptables

root@server:/# iptables -A INPUT -i dmz -j ACCEPT
root@server:/# iptables -A INPUT -i lan -j ACCEPT
root@server:/#
root@server:/# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 796 packets, 64226 bytes)
pkts bytes target prot opt in out source destination
57 4308 ACCEPT all -- dmz * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lan * 0.0.0.0/0 0.0.0.0/0


แต่เมื่อทดสอบด้วย
mii-tool กลับไม่รู้จักซะงั้น (ไม่เป็นไร พอรับได้)
root@server:/# mii-tool
no MII interfaces found


หมายเหตุ การเปลี่ยนชื่อ interface นั้นอาจทำให้ Application บางตัวที่สนใจแต่ชื่อ eth มีปัญหาได้ ดังนั้นควรตรวจสอบให้ดีก่อนใช้งานในระบบจริง (แต่เท่าที่ผมทดสอบในระบบของผม ไม่พบปัญหา)