2011年9月1日 星期四

VDSL的傳輸能力


Vdsl2 傳輸模板(profile) (要用的時候常找不到,因此先存一份在這裡)




















2011年7月25日 星期一

難搞的grep

原來grep的$ (regular expression)只能match 0D(Unix換行符號),而無法match 0D 0A(DOS換行符號)。
解決的方法是,grep 最後面用ctrl+v+enter,就會打出^M的符號。

會發生這個原因也很衰,從BRAS upload config到我的server,用的是OD的換行符號。但從NI網頁抓下來卻變成OD OA的換行符號 (正常人誰會去看hex code長怎樣啊?)

抓這個問題花了我三十分鐘的時間,當然是要記下來。

2011/07/30:
這件事還有後續。後來發現NI網頁開啟後另存新檔的檔案有一些檔案的換行符號是0D 0A,有一些卻是OD。所以就一勞永逸的處理掉:exec("unix2dos file");
直接把所有的換行符號都換成0D 0A (如果本來就是OD OA的多換一次也不會造成影響)。
於是這個問題就輕鬆的解決了。

2011年6月5日 星期日

Honeyd 安裝與設定檔調校

這個是2007年的期末報告,整理了一下就放上來,希望讓需要的人可以參考。

簡單說明Honeyd如下:
Honeyd 可以在網路上產生虛擬的機器(甚至是產生一個虛擬的網路),不限定為PC或Server,也可以是路由器、交換器等。
這些機器可以用來執行各項服務,並且可以做調整,讓他們看起來像是運行在某些作業系統上。
在同一部機器上,可以同時模擬65535個IP的運作。


How to insall:我那個時候似乎在試各種軟體上安裝機便利性,因此在各種常見平台上都安裝過。要特別小心的是arpd。我當時遇到了一點小麻煩,原因是Fedora平台提供的不是arpd,而是另一種arpd(名字很接近,但是不一樣),因此使用時要小心,要記得自己裝arpd。
在安裝時最便利的還是Ubuntu,我使用的版本是8.04,幾乎是一鍵安裝了。

In FreeBSD(with ports install):
cd /usr/ports/net/arpd ; make intall
cd /usr/ports/net/honeyd ; make install

In Ubuntu、Debian:
apt-get install honeyd

In Fedora:
yum install libpcap
yum install libpcap-devel
yum install libdnet
yum install libdnet-devel
yum install libevent
yum install libevent-deve
yum install honeyd

Install use tar ball:
1、download libpcap、libdnet、libevent、honeyd
2、uncompress and install
eg: tar xvzf libpcacp* ; cd ibpcap ; ./configure ; make ; make install

Install in MS Windows:

1、download from: http://www.citi.umich.edu/u/provos/honeyd/honeyd-0.5a-win32.zip
2、安裝winpcap

LAB架構圖:















所模擬的IP及服務平台對應表















Setup Tips 這邊是講設定時需注意的部份。由於年代有點久遠,我憑記憶大概寫一下。

How to get personality
grep "^Fingerprint" /usr/local/share/honeyd/nmap.prints
這邊應該是要找出攻擊的特徵,之後可以用來比對。例如說,我們要設定honeyd的設定檔時,如果要設定Cisco Router的話,可以找到Cisco 之類的關鍵字,然後套用在設定檔中,例如:
set router2 personality "Cisco 801/1720 router running IOS 12.2.8"

測試時可在同一個lan測試(使用同ip網段),或從Internet測試
首先一定要執行arpd,arpd的用意是讓honeyd可藉由arpd這個程式提供proxy arp的功能,來收集這些virtual honeypots的封包。這個部份是初學者常常忽略的。(我一開始吃了不少苦頭)

log file:要產生對應的檔案,讓honeyd可以將log寫進去。
touch server.log、packet.log

How to start it
簡單說明一下程式的相關參數:
arpd 192.168.1.0/24 192.168.2.0/24 172.16.1.0/30
這面要是指定arpd 去模擬(listen)的網段,這邊包含了三個網段(包含了WAN IP,資料及架構請參考架構圖及規劃表)

honeyd –d –f honeyd.conf –l packet.log –s server.log 192.168.1.1 192.168.1.100 192.168.1.135 192.168.2.1 192.168.2.100 172.16.1.1 172.16.1.2 &
-d: run as daemon
-f: config file
-l : packet log
-s: server log
IP address:maps to config file
這邊就很單純的指定honeyd以daemon執行,將packet log寫入packet.log及server log寫入server.log,以及模擬後面的幾個IP,最後的&代表在背景執行 (其實有加-d應該就不用加這個了)

configuration file
以下是設定的範例:
create openbsd
set openbsd personality "OpenBSD 3.3“
add openbsd tcp port 21 "/etc/honeyd/scripts/ftp.sh"
set openbsd default tcp action reset
set openbsd uid 32767 gid 32767
bind 192.168.1.135 openbsd
create router1
set router1 personality "Cisco 1601R router running IOS 12.1(5)"
set router1 default tcp action reset
add router1 tcp port 23 "scripts/router-telnet.pl"
bind 192.168.1.1 router1
bind 172.16.1.1 router1
create router2
set router2 personality "Cisco 801/1720 router running IOS 12.2.8"
set router2 default tcp action reset
add router2 tcp port 513 "scripts/router-telnet.pl"
bind 192.168.2.1 router2
bind 172.16.1.2 router2
route 192.168.1.1 add net 192.168.2.0/24 192.168.2.1
create linux
set linux personality "Linux 2.4.7 (X86)"
add linux tcp port 25 "scripts/smtp.pl"
add linux tcp port 110 "scripts/pop3.sh"
set linux default tcp action reset
set linux uid 32767 gid 32767
bind 192.168.1.100 linux
create windows
set windows personality "Microsoft Windows 2000 SP3"
#add windows tcp port 80 "perl scripts/win2k/iisemulator-0.95/iisemul8.pl"
#add windows tcp port 80 "python scripts/webserver/htdocs/index.py"
add windows tcp port 80 "scripts/web.sh"
add windows tcp port 135 open
set windows default tcp action reset
set windows default udp action block
set windows uid 32767 gid 32767
bind 192.168.2.100 windows

執行之後要測試一下,我們用nmap來測試:
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
80/tcp open http
110/tcp open pop3
135/tcp filtered msrpc
445/tcp filtered microsoft-ds
513/tcp open login
1900/tcp open UPnP
31337/tcp filtered Elite
Device type: broadband router|firewall|general purpose
Running: Belkin embedded, Checkpoint Windows NT/2K/XP, Linux 2.4.X|2.6.X

讓它跑個幾天幾夜,就可以去看它的log檔,應該有滿多好玩的東西。

當時寫的後續可以再研究的方向:(我如果哪天想起來會再來試試。)
使用Honeycomb來分析Log檔
使用Honeyview來分析Log檔及繪圖

2011年6月3日 星期五

OpenNMS的安裝、設定及簡易操作說明

這個是2008年的某個期末報告。
國內對於OpenNMS介紹的相關文章並不多。
因此我整理一下我安裝和操作的流程,希望需要的人可以有資料可以參考。

n安裝平台:Ubuntu 8.04 LTS Server edition
安裝版本:OpenNMS Development 1.5.91

需額外安裝軟體:
Sun JDK 1.5
PostgreSQL 8.2
rrdtool

前置作業:
首先要編輯/etc/apt/source.list,增加以下來源:
deb http://debian.opennms.org/ unstable main
deb-src http://debian.opennms.org/ unstable main

接著我們增加OpenNMS 的PGP Key 到APT
wget -O - http://debian.opennms.org/OPENNMS-GPG-KEY | sudo apt-key add -

安裝 Java SDK
我們使用apt-get安裝
sudo apt-get install sun-java5-jdk

驗證版本
java -version

如果之前有安裝過tomcat4或jre時,需重新選擇要使用的套件
指令如下:
sudo update-alternatives --config java

下載OpenNMS
下載安裝OpenNMS及相關套件,此步驟會一併下載及安裝rrdtool及postgresql
export SKIP_IPLIKE_INSTALL=1
sudo apt-get update
sudo apt-get install opennms
export OPENNMS_HOME=/usr/share/opennms

設定資料庫
此步驟要編輯pg_hba.conf及postgresql.conf
檔案都存放在/etc/postgresql/8.2/main

先編輯pg_hba.conf,設定本機認證方式
local all all ident sameuser
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
修改為:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust

接著我們編輯postgresql.conf
找到 listen_addresses = ‘localhost’ ,將前面的#號刪除
之後重啟postgresql
/etc/init.d/postgresql-8.2 restart

設定OpenNMS
我們先告訴OpenNMS,Java在哪裡
OPENNMS_HOME/bin/runjava -s

接著我們啟始OpenNMS及資料庫
OPENNMS_HOME/bin/install -dis

之後再宣告Java Home的所在
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

最後我們執行opennms
/etc/init.d/opennms start

到這個階段我們可以試著登入opennms試試囉,
預設的網址在:

http://yourhost:8980/opennms/
( yourhost記得代換為自己使用的IP。)

帳號及密碼預設都為 admin/admin

接下來是介面說明的部份,由於是從簡報檔案擷取下來的,因此看起來可能會有點怪怪的。

OpenNMS的功能表

Node List – 提供Node的資訊
Search – 搜尋Node
Outages – 搜尋失聯的Node
Path Outages – 路徑異常功能
Dashboard – 儀表板
Events – 事件
Alarms – 告警
Notifications – 通知
Assets – 資產
Reports – 報表
Charts – 圖表
Surveillance – 監督
Admin – 管理
Help – 協助


登入畫面

Nodes with Outages
失聯的節點
Percentage change over past 24 hours
24小時內變化的百分比
Notification
Resource Graphs
KSC Reports
Key SNMP Customized ,自己指定要看的snmp data,並可以自訂時間軸及圖的種類

















功能介紹- Node List

提供Node的資訊
服務的可用性
介面
通知
近期事件
近期失聯記錄














功能介紹- Search

當監控的Node數量多時可以快速找到要找的Node
依名稱關鍵字搜尋
依IP搜尋
以IP別名搜尋
以提供的服務搜尋
以MAC address搜尋
以資產類別搜尋
以資料所在搜尋

功能介紹 - Outages

當失聯的Node數量多時可以快速找到要找的Node
以Outages id來搜尋
列出目前失聯的Node
列出所有失聯的Node

功能介紹- Path Outages

Path Outages提供路徑異常功能,若該點失聯,則它以下的節點都不會列為失聯。
功能是釐清事件,能更準確的識別問題點。
以下圖為例,若將10.1.3.254設定為10.1.3.1~3的Path Outages,若10.1.3.254失聯時,10.1.3.1~3不會列入失聯記錄中。



功能介紹- Dashboard

針對Router、Switch及Server等重要設備提供快速資訊的查看,提供以下功能:
Alarms
Notifications
Node Status
Resource Graphs
也可以自訂除了Router、Switch及Server以外的類別
















功能介紹- Events

提供查看Events的介面
以Event ID來搜尋
列出目前所有的Event
提供進階搜尋功能
所含內文
IP
Label
等級
服務
時間
















功能介紹- Alarms


提供查看Alarms的介面
以Alarm ID來搜尋
列出目前所有的Alarms
提供進階搜尋功能
所含內文
IP
Label
等級
服務
時間
















功能介紹- Notifications

查詢通知記錄
以User或Notices內容來搜尋
針對登入的使用者的notices
列出送出的notices
列出已被認知的notices

功能介紹- Assets

查詢資產資料
以資產類別搜尋
列出所有節點的資產資訊

功能介紹- Reports

製作報表
Resource Graphs
KSC Performance, Nodes, Domain
Availability
Statistics Reports

功能介紹- Charts
















功能介紹- Surveillance
















功能介紹- Admin

Configure Discovery
Configure Users, Groups and Roles
Configure Notifications
Manage and Unmanage Interfaces and Services
Configure SNMP Data Collection per Interface
Configure SNMP Community Names by IP
Add Interface
Delete Nodes
Import and Export Asset Information


Scheduled Outages
Manage Surveillance Categories
Manage Applications
Manage Provisioning Groups
Manage Thresholds
Manage Location Monitors


2011年6月2日 星期四

簡易IPv6 Tunnel Broker Client在linux安裝的說明及教學:(含DNS查詢及Web Server)

簡易IPv6 Tunnel Broker Clientlinux安裝的說明及教學:(DNS查詢及Web Server)

(適用平台Ubuntu 10.04 Server Edtion)

首先切換到放置source code的目錄

cd /usr/src

(這是我的個人習慣,讀者請依自己的習慣處理)

把檔案抓下來

http://www.go6.net/4105/download.asp

我下載的是:Client 6.0 Source Code (Linux/Unix/Darwin/BSD)

(這邊要注意的是,如果讀者跟我一樣希望有固定IP可以讓別人連線的話,不要下載其它電信業者提供的原始檔,例如gogoc-1_2-RELEASE這個版本。可能是版本太舊的關係,我用這個檔案作認證時,會有TSP版本不支援的訊息,例如TSP version not supported by server: 2.0.2.)

再來就是解壓縮

tar xvf gw6c-6_0-RELEASE-src

切換到解壓縮之後的目錄

cd gw6c-6_0

直接編譯試試(不看安裝說明也是我個人的習慣 XD)

make

結果很不幸,出現以下的錯誤訊息:

can't find openssl/bn.h

安裝對應的函式庫:(如果有其它錯誤訊息就麻煩讀者自行克服了)

apt-get install libssl-dev

裝完之後make就會過了,

但是make install又會有錯誤訊息:

make install

Error: You must specify the install directory

Syntax: make [platform=] installdir= install

似乎是沒有指定os的種類和安裝目錄造成。因此我們指定一下:

make platform=linux installdir=/usr/local/gw6c install

我習慣把安裝後的程式放在/usr/local/裡面

再來就是帳號設定的部份,我想要讓別人可以連進我的IPv6 server,因此我選擇了使用帳號密碼的認證方式,目的是要取得固定IP。這部份用遠傳、亞太和中研院應該都可以,我使用的是亞太電信,

http://tb2.ipv6.apol.com.tw:8080

開啟後選擇第一個,由server幫我設定隨機密碼。(User account creation html web page (automatically generated password)

輸入您要的ide-mail address,送出不久後你就會收到包含帳號密碼的e-mail了。

接著就是填入帳號及密碼的資料:

vi /usr/local/gw6c/bin/gw6c.conf

(vi請自行代換成您熟悉的編輯器)

再改一下server的名稱,我們找到server=這一行,把它改成這樣:

server= tb2.ipv6.apol.com.tw

此外認證的方式也要改,

找到auth_method=anonymous,改成auth_method=any

接著我們啟動試試:

/usr/local/gw6c/bin/gw6c -f /usr/local/gw6c/bin/gw6c.conf

這個程式執行之後會自動常駐在記憶體中,因此不需要加上&號。

之後就可以看到一個新介面的產生:(前輩說mask起來比較安全,因此我作了一點施工)




這個時候可以測試一下有沒有通,我們用以下的指令來測試:

ping6 tb2.ipv6.ascc.net

完成之後,可以用安裝了Tunnel Broker的電腦來測試一下,同樣是使用ping6來檢驗。如果有開啟web服務的話,也可以用安裝了Tunnel Broker的電腦來測試一下是否能開啟,記得網址列要加中括號把位址包起來,像這樣:http://[Your IPv6 Address]

接著我們看一下Web server的設定。如果是使用apache2的話,基本上是不需要調整的。但是以我的情形,必須要編輯/etc/apache2/ports.conf這個檔案,然後加上這一行:

Listen [Your IPv6 Address]:80

(IP的部份我還是遮一下比較保險。記得不需要加入/128這種遮罩,以我的例子來說,加到::2就可以了)

加完記得要重啟一下apacheapache2ctl restart

再用netstat來確認一下:



至此應該是大功告成了。剩下的就是DNS的部份了。

我是至 http://domain.hinet.net/free365_idv.html 個網頁申請的 (我試了其它幾家,有一些沒有明顯的說明不收費,有一些在設定DNS/IP對後時無法設定 IPv6的位置)。註冊所需的序號是在 http://ipv6day.tw/11freedomain.html 這個頁面取得的。設定及開通之後在http://domain.hinet.net/,的頁面選擇『個人域名(idv.tw)』裡面的『DNS異動與查詢』,並進行相關的設定即可。

依慣例,設定完成後24小時候就可以在全世界查到了(也許會快一點,我的狀況是設定完馬上就通了)。別忘記可以用ping6 YourIPv6DomainName來試試能不能ping的到。之後就可以使用http://6check.rd.ipv6.org.tw/indexloukver.php#tabs-test的功能來測試一下,你的網頁伺服器是否有支援IPv6了。我的測試結果如下:(題外話,我在測試時沒有放index.htm,測試時一直不會過,後來我把這個檔案生出來才正常的測試通過)

2010年4月10日 星期六

FTP server + PHP 新檔通知

先作一個遞迴列回資料夾和檔案名稱的程式:list.php
$today=system("date +%Y-%m-%d");
$yesterday=("date --date=\"1 day ago\" +%Y-%m-%d");


//getDirectory( "." );
getDirectory( "/var/lib/mldonkey/incoming/files" );



function getDirectory( $path = '.', $level = 0 ){

$ignore = array( 'cgi-bin', '.', '..' );
// Directories to ignore when listing output. Many hosts
// will deny PHP access to the cgi-bin.

$dh = @opendir( $path );
// Open the directory to the handle $dh

while( false !== ( $file = readdir( $dh ) ) ){
// Loop through the directory

if( !in_array( $file, $ignore ) ){
// Check that this file is not to be ignored

$spaces = str_repeat( '', ( $level * 4 ) );
// Just to add spacing to the list, to better
// show the directory tree.
if( is_dir( "$path/$file" ) ){
// Its a directory, so we need to keep reading down...

//echo "Directory:$spaces $file\n";
getDirectory( "$path/$file", ($level+1) );
// Re-call this same function but on a new directory.
// this is what makes function recursive.

} else {
echo "$spaces$file\n";
// Just print out the filename

}

}

}
closedir( $dh );
// Close the directory handle

}

?>

再來,做一個CheckNewFile.sh
#!/bin/sh
today=`date +%Y-%m-%d`
yesterday=`date --date="1 day ago" +%Y-%m-%d`
/usr/bin/php /root/list.php > /tmp/$today.log
/usr/bin/find /var/lib/mldonkey/incoming/files/ -name `diff -u /tmp/$yesteray.log \ /tmp/$today.log | grep +File: | awk -F: '{print $2}' ` | awk -F/files/ '{print $2}' > \ /tmp/$today-check.log
/usr/bin/test -s /tmp/$today-check.log && /usr/bin/php /root/MailCheckFile.php

如果今天的check.log是空的話,就不通知了。如果不是空的話,
再執行MailCheckFile.php(用PHPMailer改的程式),寄出通知信。

最後再做一件事,編輯crontab

0 8 * * * /bin/sh /root/CheckNewFile.sh

呼,這樣就好了。PHP+shell script是很強大的!

2010年1月18日 星期一

2010 一月份的 SA@Tainan –雙連發駭客終極解碼心得

在ptt上看到有人推文這個課程,剛好又在台南。就馬上拉了max和ken參加。
沒有想到,報名時需要有domain的人才能參加(據max說因為是twnic協辦的關係)
於是跟ram借了帳號密碼(在此感謝ram的幫忙)

早上是blueT的課程,blueT是Ubuntu的推廣者(也是Perl 愛好者),相當讓人佩服的人。
我對於願意貢獻出自己的時間和精力的人,總是相當敬佩的。

同課程的kevin和楊姓少年(現在應該是楊姓青年了,抱歉,真的忘了怎麼稱呼)
也大大方方貢獻出自己的心得,在職場久了就會發現,願意和別人分享自己所學所得的,真的是很了不起的人。我後來發現,我參加類似的課程都是在抄別人用什麼軟體的,我果然是個script middle-ager)

現場當然是有一些示範。不過也許是我比較容易操心,總覺得許多年輕人會不會就這樣一種栽入黑的世界…但願是我多慮。

blueT也用 HIT2009的幾題來講解一些手法。例如game3的解法,我其實不知道kill -11 的用法,真的是上了一課。不過呢....我也沒有解過那一題。(我大概也解不出來,所以我後來跑去問newbug)
newbug說:
"ulimit -c unlimited
再kill -9 吧"
try it

應該去要個試題的說 XD

下午場次是CIH的課,這是我第二次聽CIH的課程,上一次是在HIT2009,聽他講P2P Botnet的概念。
CIH是讓人很感動的人,連第一次聽他上課的ken,都感覺的出 CIH的熱情和執著。
唯偏執者得以倖存,不曉得這句話用在這裡適不適當。

CIH的邏輯真的很強,聽他上完課,我才發現我以前考的LPI原來有很多觀念是可以用在這些地方的。另外他的學習曲線和一般人明顯的不一樣,要模仿和學習可能都很困難。不過聽邏輯好的人講話真是舒服,希望我自己也能一直向著這個目標前進。

CIH介紹的是在linux環境下,如何修正程式的檢查。用的是ptrace函數。
用的方法在我腦中浮現的是:
1、用ptrace,找出ls這個程式每一行程式碼的位址(base address + library address + program address),然後把它存下來。這邊的library指的是ld-linux,其它程式不見得是它。
2、再比較兩種不同的輸入得到的不同輸出結果,用diff找出其分歧點。
3、用gdb,把分歧點設成中斷點。再設定的eip,讓他跳過的那一段程式碼,直接執行的程式碼。。
4、最後計算出要修正的碼(從je或jne變成jmp,然後把位址塞到剛好,避免因長度不一樣而無法執行,據說和-o這個參數有關?)
5、用mc或vi (%xddi)來改hex code

這其中學到一個方法很有趣,就是 CIH用來查每個CPU的ASM CODE的方法。
用一個while(1),在上下都asm("nop");,然後用objdump看他的結果。

另外,CIH用hello world(事實上是輸入數字作判別)來取代比較有問題的ls(原因是ls會讀,這一個應變手法,也讓我學到一課。

晚上和ken和max去吃義大利麵,感謝ken大的招待(別人請你吃飯或借你東西才會加個大字,我果然是個現實的人 ^_^)

晚上回家時運氣很好,自強號剛好誤點,被我們坐到,在八點前就到高雄了,和max一起行動總有好事發生。

記一個手法:
readelf -a /bin/ls | grep less
再/text,可以看執行時的address
也可以看 Entry point address

記一個觀念:
cat /proc/1946/maps
可以看到1946這個process讀了哪些so,和他們怎麼配置在記憶體中。