Disclaimer: ข้อมูลทั้งหมดใน blog นี้ มิได้หวังผลในเชิงการค้าแต่อย่างใดสามารถนำไปใช้ประโยชน์ต่างๆ ได้ ตราบใดที่มีการอ้างอิงต้นฉบับ และแจ้งให้สมาชิกของประชาคมทราบว่าขอนำไปใช้ที่ใด ห้ามผู้อื่นนำไปข้อความในเว็บนี้ไปพิมพ์จำหน่ายโดยไม่ได้รับอนุญาตจากเจ้าของข้อเขียน โปรดติดต่อกันเองระหว่างผู้ขอใช้และผู้เขียน การเสนอความเห็น ขอให้ใช้ภาษาที่สุภาพและเขียนอยู่ในเนื้อเรื่อง หากท่านพบข้อความที่ไม่เหมาะสม โปรดแจ้งลบพร้อมอธิบายเหตุผลด้วย

วันพุธที่ 8 ธันวาคม พ.ศ. 2553

คุณรู้หรือไม่ว่า Social Networking อาจทำคุณตกงานได้


การใช้งานเครือข่ายสังคม (Social Networking) ซึ่งเป็นที่นิยมอย่างสูงในปัจจุบันหากเราใช้งานโดยการโพสต์ข้อความอย่างไม่ระวัง ไม่มีการตั้งค่าความเป็นส่วนตัวที่เหมาะสม รวมถึงรับ add friend จำนวนมากทั้งๆ ที่ไม่รู้จักบุคคลเหล่านั้นเลย อาจมีความเสี่ยงที่จะตกงานได้นะครับ หากคุณเป็นคนหนึ่งที่กำลังหางาน หรือมีงานอยู่แล้ว และนายจ้างของคุณก็เป็นคนที่รู้จักใช้เทคโนโลยีในการตรวจสอบลูกน้องซะด้วย นายจ้างอาจค้นหาข้อมูลของคุณแล้วบังเอิญไปพบข้อมูลที่คุณกล่าววาจาอันไม่เหมาะสมผ่านข้อความบนเครือข่ายสังคม หรือแอบเมาส์นินทาเจ้านายรวมไปถึงเพื่อนร่วมงานคนอื่นๆ ซึ่งสิ่งเหล่านี้หมายถึง เจตคติ และนิสัยส่วนตัวของคุณ หากเจ้านายรับได้ก็คงไม่เกิดปัญหาอะไร แต่ถ้าหากเค้าเกิดกลัวว่าซักวันมันก็คงไปวิจารณ์เราผ่านหน้าเว็บเหมือนกัน คุณอาจจะไม่ได้รับการพิจารณาเข้าร่วมงาน หรืออาจได้รับซองขาวก็เป็นได้นะครับ ฉะนั้น พึงระวังข้อความ และตรวจสอบก่อนการโพสต์ข้อความต่างๆ บนเว็บเครือข่ายสังคมด้วยนะครับ

วันศุกร์ที่ 3 ธันวาคม พ.ศ. 2553

เซิร์ฟเวอร์ ftp.proftpd.org ถูกบุกรุก

Server ftp.proftpd.org Compromised





ProFTPD ได้ออกมาประกาศขอโทษและแจ้งให้ผู้ใช้งานที่ได้ดาวน์โหลดซอร์สโค้ด proftpd เวอร์ชั่น 1.3.3c ระหว่างวันที่ 28 พฤศจิกายน 2553 ถึง 2 ธันวาคม 2553 ไปใช้งานว่า ให้ตรวจสอบความปลอดภัยระบบของตนด้วย เนื่องจากเซิร์ฟเวอร์ ftp.proftpd.org ที่ให้บริการดาวน์โหลดซอร์โค้ดนั้นถูกบุกรุก และผู้บุกรุกได้เข้าไปแก้ไขข้อมูลในซอร์สโค้ด ProFTPD เวอร์ชั่นดังกล่าว จึงขอให้ผู้ใช้งานที่ดาวน์โหลดระหว่างช่วงเวลานั้นให้ตรวจสอบระบบของตนเองด้วย และให้ตรวจสอบความถูกต้องของ source files โดยใช้ PGP Signatures จาก http://www.proftpd.org/md5_pgp.html ทั้งนี้การบุกรุกครั้งนี้ไม่มีผลกระทบต่อซอร์สโค้คที่อยู่ใน CVS


ที่มา: http://www.proftpd.org และ http://bit.ly/gyvoBe

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

ปัญหาความปลอดภัยบนระบบ Virtualization

หลายๆ องค์กรได้หันมาทำ Server Consolidation กันมากขึ้นโดยใช้งานระบบ Virtualization เช่น VMWare และทำเป็น Server Farm ซึ่งมีประโยชน์หลายอย่างมาก แต่ปัญหาความปลอดภัยจากการใช้งาน virtualization ก็มีเช่นกัน ลองดูตัวอย่างที่ผมสรุปคร่าวๆ ดังนี้ครับ

ปัญหาความปลอดภัยบนระบบ Virtualization

1. โดยทั่วไปถ้าเราปิดการทำงานของระบบลง การบุกรุกหรือไวรัสก็ไม่สามารถเข้าถึงตัวเครื่องได้ แตในะรบบ virtualization ถึงแม้ว่าเราจะปิดการทำงานของระบบปฏิบัติการที่ทำงานอยู่บน virtualiztion ลง แต่ส่วนของระบบบริหารจัดการ (Hypervisor) ยังคงทำงานและมัความเสี่ยงในการถูกบุกรุกอยู่ ส่งผลให้ virtualization ที่ปิดไปก่อนหน้านั้น ไม่สามารถป้องกันตนเองได้

2. การทำการ scan บนระบบ virtualization โดยปกติที่ anti virus server นั้นเราจะตั้งเวลาให้เครื่องในระบบ scan พร้อมกัน แต่บนระบบ virtualization หาก server ตั้งเวลาให้ทุกเครื่อง scan พร้อมกัน จะเห็นได้ว่าการทำงานจะช้าลงอย่างเห็นได้ชัด เนื่องจากยังคงมีการใช้ทรัพยากรร่วมกันบน hypervisor เดียวกัน อาจจะทำให้ virtualization host หยุดการทำงานได้

3. การโคลน virtualization นั้น ช่วยให้ประหยัดเวลาในการทำงานได้มากก็จริง แต่หาก master image ที่นำมาโคลนนั้น ไม่ได้อัพเดท patch หรือติดไวรัส ช่องโหว่เหล่านั้นก็จะถูกส่งต่อไปยัง virtualization ที่ถูกโคลนมาด้วยเช่นกัน

4. ปัญหา Inter VM Traffice เนื่องจาก virtualization host ที่อยู่บน hypervisor เดียวกันจะติดต่อกันผ่าน vSwitch และ vmNIC บน hypervisor หากเครื่องใดเครื่องหนึ่งเกิดการแพร่กระจายของไวรัส ก็จะเกิดความเสี่ยงในการแพร่กระจายภายใน host ที่ใช้ hypervisor ร่วมกัน โดยอุปกรณ์ตรวจสอบเช่น IDS/IPS บนเครือข่ายจะไม่สามารถตรวจสอบได้ เนื่องจากข้อมูลไม่มีการส่งออกมายังระบบเครือข่ายภายนอก

ที่มา: Trend Micro Cloud Security

วันอังคารที่ 16 พฤศจิกายน พ.ศ. 2553

กรณีตัวอย่างการบุกรุกผ่าน link บนเว็บ www.facebook.com

กรณีตัวอย่างที่ 1

โปรดระมัด ระวังในการคลิ้ก link ที่มาพร้อมกับเว็บ Social Network โดยเฉพาะอย่างยิ่ง link ที่มาจากบุคคลที่ท่านไม่รู้จัก ทั้งในและนอกรายชื่อเพื่อน (Friends) ของท่าน

left

left

กรณีตัวอย่างที่ 2

ผู้บุกรุกใช้วิธี การแพร่กระจายโปรแกรมบุกรุกผ่านโปรแกรมที่ใช้งานผ่าน social network โดยเมื่อท่านคลิ้กเข้าใช้งานโปรแกรม โปรแกรมบุกรุกจะถูกเรียกและติดตั้งลงบนเครื่องคอมพิวเตอร์ที่ใช้งานทันที




left


left

left

คำแนะนำ

โปรดระมัดระวังในการใช้งานโปรแกรม (applications) ต่างๆ ที่ทำงานอยู่บนเว็บ Social Networking โดยเฉพาะอย่างยิ่ง โปรแกรมต่างๆ ที่มาในรูปแบบที่ผู้ใช้ไม่สามารถอ่านและทำความเข้าใจคำแนะนำของโปรแกรมได้ การกดอนุญาต (allow) ให้ applications บนเว็บ social networking ทำงานได้นั้นหมายถึงการที่ผู้ใช้อนุญาตให้โปรแกรมบุกรุกเหล่านั้นเข้าถึง ข้อมูลต่างๆ บนเว็บ Social networking ได้ อาจทำให้ผู้ใช้สูญเสียข้อมูล และความเป็นส่วนตัวได้

วันพุธที่ 10 พฤศจิกายน พ.ศ. 2553

ภาษาไทย... วิบัติ

ห่างหายจากการเขียน blog ไปนานนะครับ วันนี้กลับมาเขียน แต่จะขอเขียนเรื่องราวที่ไม่ได้เกี่ยวข้องกับ IT โดยตรง แต่เกี่ยวกับการใช้ภาษาที่เราสื่อสารกันนะครับ สืบเนื่องมาจากวันนี้ได้ติดตามข่าวคราวว่ามีผู้หลักผู้ใหญ่ในบ้านเมืองเป็นห่วงเกี่ยวกับการใช้ภาษาไทยที่ผิดๆ และให้นับเป็นวาระแห่งชาติ ผมก็เห็นด้วยนะครับ

คำว่า "ภาษาวิบัติ" เป็นคำเรียกของการใช้ภาษาไทยที่มีการเปลี่ยนแปลง และไม่ตรงกับมาตรฐานตามหลักภาษาซึ่งเกิดจากการมิได้ตั้งใจทำให้รูปแบบการใช้งานของภาษาผิดไปจากเดิม แต่ในปัจจุบันการใช้งานเว็บไซต์เครือข่ายสังคม (Social Network) เช่น facebook และ twitter โดยเฉพาะอย่างยิ่งการใช้งาน twitter นั้นผู้ให้บริการจะกำหนดจำนวนตัวอักษรที่จะส่งข้อความขึ้นเว็บได้เพียง 140 ตัวอักษร จึงทำให้ผู้ใช้งานซึ่งโดยส่วนมากแล้วเป็นกลุ่มวัยรุ่นจะใช้ข้อความที่ไม่ถูกต้องตามหลักภาษาไทย นี่เป็นอีกปัจจัยหนึ่งที่ทำให้เกิดภาษาไทยวิบัติอย่างรุนแรงในปัจจุบัน เรามาดูตัวอย่างภาษาไทยที่มักจะมีการใช้งานผิดๆ กันในเครือข่ายสังคมกันนะครับ ซึ่งมีตัวอย่าง ดังต่อไปนี้

คำที่สะกดผิดเพื่อให้แปลกตา
- นู๋ (หนู)
- ชะมะ,ชิมิ (ใช่ไหม)
- ว้าววว (ว้าว)
- ป่าว (เปล่า)

การลดรูปคำ
เป็นรูปแบบของคำที่ลดรูปให้สั้นลง มีใช้ในภาษาพูด
- มหาลัย หรือ มหา'ลัย (มหาวิทยาลัย)
- วิดวะ (วิศวกรรม)

คำที่สะกดผิดเพื่อแสดงอารมณ์
- ไม่ → ม่าย
- ใช่ → ช่าย
- ใคร → คราย
- อะไร → อาราย
- เป็นอะไร → เปงราย
- ทำไม → ทามมาย

คำที่สะกดผิดเพื่อลดความหยาบของคำ
หรืออาจใช้หลีกเลี่ยงการกรองคำหยาบของซอฟต์แวร์
- กู → กรู
- ไอ้สัตว์ → ไอ้สาด

ข้อมูลดังกล่าวเป็นเพียงส่วนหนึ่งของการใช้ภาษาไทยผิดๆ ซึ่งยังไม่รวมถึงการใช้คำศัพท์บัญญัติใหม่ของกลุ่มวัยรุ่นที่มีอีกค่อนข้างมาก เช่น เกรียน, ติ่งหู, เมพ, กาก ฯลฯ ซึ่งหากเรายังใช้ภาษาไทยที่ไม่ถูกต้องตามหลักภาษาต่อไปนั้นเป็นที่น่าเป็นห่วงว่า วัยรุ่นยุคใหม่อาจไม่สามารถใช้ภาษาไทยได้อย่างมีประสิทธิภาพเท่าที่ควร

ข้อมูลอ้างอิง: http://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B8%A7%E0%B8%B4%E0%B8%9A%E0%B8%B1%E0%B8%95%E0%B8%B4

วันอังคารที่ 28 กันยายน พ.ศ. 2553

Finding Flaws in Your Database Server

If you want to find security bugs in your database system, there are a few basic principles and techniques that might help:
- Don't believe the documentation
- Implement your own client
- Debug the system to understand how it works
- Identify communication protocols
- Understand arbitrary code execution bugs
- Write your own "fuzzers"

From: The Database Hacker's Handbook

วันจันทร์ที่ 16 สิงหาคม พ.ศ. 2553

การแก้ปัญหา Inbound database replication denied – shared key mismatch บน Cisco ACS

การแก้ปัญหา Inbound database replication denied – shared key mismatch บน Cisco ACS

ก่อนจะเข้าปัญหาถ้าใครสงสัยว่า Cisco ACS คืออะไรอ่านได้ที่

https://www.cisco.com/web/TH/assets/docs/pm200310_26-27.pdf

เพื่อที่จะสะดวกต่อการอธิบายของผม ลองอ่านวิธีการทำ Cisco - Secure ACS Database Replication Configuration Example ได้ที่

http://www.cisco.com/warp/public/110/acs_db_replication.pdf

ผมเองได้ลองทำตามเอกสารข้างบนแล้วครับ ยังปรากฎเป็นปัญหาที่อาจจะเกิดจากความไม่เข้าใจของผมเองครับ เนื่องจากเข้าใจว่าเพียงตั้งค่า Shared key ของสองฝั่งระหว่าง primary กับ secondary ให้ตรงกันก็คงจะใช้งานได้ ที่ไหนได้ล่ะครับ จะเห็นได้ว่าจากภาพผมเพิ่ม AAA Server ไว้ทั้งสองตัวแล้ว อันได้แก่ บนเครื่อง primary (192.168.0.254) ผมเพิ่ม 192.168.0.253 เพื่อใช้เป็น secondary ไว้แล้ว เช่นเดียวกันบน secondary ผมก็เพิ่ม 192.168.0.254 ไว้ใน list ของ AAA server แล้วเช่นเดียวกัน



หลังจากนั้นก็กดให้เครื่องทั้งสอง Replicate ข้อมูลกัน ตามภาพด้านล่าง



ผลปรากฏว่าเกิด error ขึ้นและข้อมูลทั้งสองเครื่องไม่สามารถ replicate กันได้



จากข้อมูล error ดังกล่าวเล่นเอางงไปหลายรอบเหมือนกันครับ เพราะไม่รู้ว่าเราทำอะไรผิด ทั้งๆ ที่เราก็ใส่ shared key บน configuration ของทั้งสองเครื่องเหมือนกันแล้ว



จนมาถึงบางอ้อครับมันต้องไปใส่ shared key ให้กับเครื่องตัวเองด้วย มิใช่แต่เพียงใส่ให้เครื่อง AAA ที่เพิ่มมาใน list ใหม่ของทั้งสองฝั่ง เช่น



จากภาพเป็น config ของเครื่อง 192.168.0.254 โดยได้เพิ่ม AAA Server เครื่อง 192.168.0.253 เข้าไปใน list ซึ่งตามธรรมชาติ เราจะเข้าใจว่าต้องเอาเครื่อง 192.168.0.254 ไปเพิ่มใน list ของฝั่งตรงข้าม แล้วก็จัดการ set ค่า shared key ของทั้งสองฝั่งให้ตรงกัน แต่ในความเป็นจริงนั้น เราต้องกดเข้าไปที่เครื่องตัวมันเองแล้วใส่ shared key ให้ตรงกันด้วย ดังภาพ



กล่าวคือ เราต้องใส่ shared key ให้ตรงกันถึง 4 จุด ตามหลักทั่วไปน่าจะใส่แค่ 2 จุด คือต้นทาง กับปลายทาง แต่ในที่นี้ต้องใส่ต้นทาง 1 ปลายทาง 1 และตัวมันเองอีก 2 เป็น 4 จุด

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



เมื่อกด replicate ข้อมูลหลังจากปรับแต่งค่าใหม่แล้ว บน report จะไม่ปรากฏ error และข้อมูลบน AAA Server ทั้งสองเครื่องจะเหมือนกัน ดังภาพ



วันพุธที่ 30 มิถุนายน พ.ศ. 2553

Basic vi Command

วันนี้คิดถึงสมัยเรียนปริญญาตรีเลยมานั่งเขียนความรู้เกี่ยวกับ Basic vi Command สนุกๆ เล่นดีกว่า เริ่มเลยนะครับ โดยปกติแล้วหลังจากที่เราติดตั้งระบบปฏิบัติการ Unix, Linux ก็จะมีโปรแกรมบรรณาธิกรมาให้อยู่ตัวหนึ่งนั่นก็คือ vi ซึ่งย่อมาจาก (Visual Editor) ซึ่งโปรแกรมจำพวกนี้ก็จะมีหลากหลายตัวนะครับ เช่น emacs, nano หรือ pico ซึ่งคล้ายๆ กับการใช้งาน notepad หรือ editplus บน Windows แต่ที่ผมถนัดใช้เลยก็เห็นจะเป็น vi นี่แล่ะครับ เพราะใช้มันมาตั้งแต่สมัยเรียน


vi เป็น full screen editor ซึ่งการทำงานจะมีสองโหมด คือ
1. command mode ซึ่งหากพิมพ์อะไรในโหมดนี้ก็จะเป็นคำสั่งที่ดำเนินการบนโปรแกรมทั้งสิ้น
2. insert mode เป็นโหมดที่ใช้เพิ่ม แก้ไข เนื้อหาหรือข้อมูลในไฟล์
เราสามารถเข้าสู่ insert mode โดยการกด i และกลับสู่ command mode โดยกด Esc ครับ

เริ่มใช้งานกันเลย...
เราสามารถเปิด text file เพื่อเข้าไปสร้างหรือแก้ไขข้อความโดยใช้คำสั่ง vi แล้วตามด้วย filename

$vi example.txt

เมื่อต้องการจะออกจาก vi...
หลังจากที่เราเข้าไปจัดการเขียนหรือแก้ไขข้อมูลเรียบร้อยแล้วหากเราต้องการจะออกจากโปรแกรม vi ก็อย่าลืมนะครับว่าเราจะต้องกลับเข้าสู่ command mode ซะก่อนโดยกด Esc ซึ่งวิธีดูว่าเราอยู่ command mode หรือไม่นั้นให้เราดูที่ cursor ก็ได้ครับ หากอยู่ command mode เจ้า cursor จะอยู่ด้านล่างของจอเมื่อเรากด colon (:) ครับ โดยคำสั่งที่ใช้ออกจาก vi มีดังนี้

:wq = บันทึกข้อมูลที่ได้เขียนหรือแก้ไขในไฟล์นั้นๆ แล้วออกจากโปรแกรม
:q = ออกจากโปรแกรม
:q! = ออกจากโปรแกรมโดยไม่บันทึกข้อมูลในส่วนที่เพิ่มเติมหรือแก้ไขในไฟล์นั้นๆ

การเลื่อน cursor...
ในโปรแกรม vi แท้ๆ นั้นจะไม่สามารถใช้ลูกศรเลื่อน cursor ได้เหมือนกับโปรแกรม editor ทั่วๆ ไป โดยเฉพาะอย่างยิ่งถ้าหากทำงานบน Unix แท้ๆ แล้วนั้นจะต้องใช้ command mode ในการเลื่อน cursor เท่านั้น โดย key ที่ใช้ในการเลื่อน cursor มีดังนี้

j = เลื่อนลง 1 บรรทัด
k = เลื่อนขึ้น 1 บรรทัด
h = เลื่อนไปทางซ้าย 1 ตัวอักษร
l = เลื่อนไปทางขวา 1 ตัวอักษร
0 = เลื่อนไปยังตำแหน่งเริ่มต้นของบรรทัดปัจจุบัน
$ = เลื่อนไปยังตำแหน่งสุดท้ายของบรรทัด
:0 = เลื่อนไปยังบรรทัดแรกของไฟล์
:ตัวเลข = ไปยังบรรทัดของตัวเลขนั้นๆ
:$ = ไปยังบรรทัดสุดท้าย

ยังมีอีกเยอะเลย นี่เพิ่งแค่เริ่มต้น เดี๋ยวว่างๆ จะมาพิมพ์ต่อนะครับ

วันศุกร์ที่ 25 มิถุนายน พ.ศ. 2553

Script สำหรับตรวจสอบรหัสผ่านใกล้หมดอายุบน AcitiveDirectory

Script สำหรับตรวจสอบรหัสผ่านใกล้หมดอายุบน AcitiveDirectory นี้ ใช้ตรวจสอบข้อมูลการแก้ไขรหัสผ่านของผู้ใช้หากใกล้หมดอายุ script ก็จะส่งเมล์ไปเตือนให้ ถามว่าทำไมต้องทำเพราะบน AD เองก็สามารถเตือนได้เหมือนกัน คำตอบคือสำหรับบางคนที่ใช้ AD ผูกกับระบบอื่นๆ เช่น ใช้งานโปรแกรมต่างๆ ผ่านเว็บโดยไม่ได้ login เข้าด้วย username บนโดเมนเลย หรือแม้แต่ไม่เคย shutdown เครื่องใช้แต่การ hibernate ไว้เป็นเวลานานๆ AD จะไม่ส่ง popup ไปเตือนที่หน้าจอเลย บางครั้งรหัสผ่านหมดอายุไปแล้วต้องมาเสียเวลา่ reset password กันทีหลัง เลยเป็นที่มาของการทำ script ตัวนี้ครับ อันที่จริง script พวกนี้ก็คงมีอยู่เยอะแยะให้เราเลือกโหลดได้ตามเว็บไซต์ทั่วไป แต่อัน script นี้ผมได้แก้ไขเพื่อให้มีการบันทึก Log ไว้เพิ่มเติมจาก script ต้นฉบับ และได้แก้ไขในส่วนของตัวแปลต่างๆ เพื่อให้เปลี่ยนแปลงค่า configuration ต่างๆ สามารถทำได้ง่ายขึ้น script นี้อาจไม่ใช่ script ที่ดีที่สุดนะครับ เพราะมันเป็นการเขียน VBScript ครั้งแรกของผม หากท่านใดมีคำแนะนำเพิ่มเติมบอกผมได้เลยนะครับ...

'++++++++ Begin of Script ++++++++++++++++

' VB Script for Check User Password Expire on Active Directory Server
' 1st Revision
' By: John Savill, 8th June 2005
' Runs check on last password change date
'
' Last Updated
' By: Chanin Luangingkasut, 24 June 2010
' Create log file
'=================================
Option Explicit

Dim objCommand, objConnection, objChild, objUserConnection, strBase, strFilter, strAttributes, strPasswordChangeDate, intPassAge
Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage
Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain
Dim strQuery, objRecordset, strName, strCN
Dim CheckNoRecord, MAXRECORD, EXPIREIN, PWDNOTIFICATION

' *********** SETUP LOG FILE ***************
Dim objFSO, objFolder, objTextFile, objFile
Dim strDirectory, strFile, strText
Dim myDateString, myTimeString, d

' ****** Check current time and date ********
d = Now
myTimeString = Right("00" & Hour(d), 2) & "" & Right("00" & Minute(d), 2) & "" & Right("00" & Second(d), 2)
myDateString = FormatDateTime(Date(), 1)

' ********* Create file and directory ***********
strDirectory = "d:\PasswordExpireLog"
strFile = "\passwordExpireReport_" & myDateString & "_Time_" & myTimeString & ".log"

' Create the File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Check that the strDirectory folder exists
If objFSO.FolderExists(strDirectory) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFolder = objFSO.CreateFolder(strDirectory)
WScript.Echo "Just created " & strDirectory
End If

If objFSO.FileExists(strDirectory & strFile) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
'Wscript.Echo "Just created " & strDirectory & strFile
End If

set objFile = nothing
set objFolder = nothing
' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8

Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)

' ************** End of Create Log file ****************

' ***CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT OF WHERE USERS WILL BE SEARCHED ******

PasswordExpiry=90
EXPIREIN = 15
MAXRECORD = 150
strRootDomain="dc=example,dc=com"

' ***********************************************

' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If

Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = ""

strFilter = "(&(objectCategory=person)(objectClass=user))"
strAttributes = "sAMAccountName,cn,mail,pwdLastSet,distinguishedName"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute

' WScript.echo "Running at " & Date()

CheckNoRecord = 0

' ******************* IN LOOP *******************
Do Until objRecordSet.EOF
strName = objRecordSet.Fields("sAMAccountName").Value
strCN = objRecordSet.Fields("cn").value
strEmailAddress = objRecordSet.Fields("mail").value

CheckNoRecord = CheckNoRecord + 1

' ********** ALERT BOX & WRITE FILE SHOW USER NAME *************
'Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN
'objTextFile.WriteLine("NT Name: " & strName & ", Common Name: " & strCN)

Set objUserConnection = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)
Set objPwdLastSet = objUserConnection.pwdLastSet
strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias)

' *********** ALERT BOX SHOW & WRITE FILE LAST CHANGE DATE ************
'WScript.Echo vbTab & "Password last changed at " & strPasswordChangeDate
'objTextFile.WriteLine("Password last changed at " & strPasswordChangeDate)

intPassAge = DateDiff("d", strPasswordChangeDate, Now)

' **** ALERT BOX SHOW & WRITE FILE TOTAL DAYS FROM LAST CHANGE DATE *****
'WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"
'objTextFile.WriteLine("Password changed " & intPassAge & " days ago")

If intPassAge >= PasswordExpiry Then
objTextFile.WriteLine("-- Following user do not change password long time ago, account may be administrator or disable user. ")
objTextFile.WriteLine("-- NT Name: " & strName & ", Common Name: " & strCN)
objTextFile.WriteLine("-- Password last changed at " & strPasswordChangeDate)
objTextFile.WriteLine("-- Password changed " & intPassAge & " days ago, for security reason must change every " & PasswordExpiry & " days")
objTextFile.WriteLine(" ")
Else
PWDNOTIFICATION = (PasswordExpiry - intPassAge)
If EXPIREIN >= PWDNOTIFICATION Then
objTextFile.WriteLine(">> NT Name: " & strName & ", Common Name: " & strCN)
objTextFile.WriteLine(">> Password last changed at " & strPasswordChangeDate)
objTextFile.WriteLine(">> Password changed " & intPassAge & " days ago")
objTextFile.WriteLine(">> Sending user notification to " & strEmailAddress & " that password expires in " & PWDNOTIFICATION & " days")
objTextFile.WriteLine(" ")
End If
End If

' *** Remove or Comment this part if you want to check all users on your server ****
If CheckNoRecord = MAXRECORD Then
Exit Do
End if
' *****************************************************

objRecordSet.MoveNext
Loop

objTextFile.WriteLine("================================")
objTextFile.WriteLine("TOTAL Scan: " & CheckNoRecord)

objTextFile.Close
objConnection.Close


Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is overly large
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function

Sub SendEmailMessage(strDestEmail, strNoOfDays)
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Password Expires in " & strNoOfDays & " days"
objMessage.Sender = "IT ADMIN DO NOT REPLY"
objMessage.To = strDestEmail
objMessage.TextBody = "Your password expires in " & strNoOfDays & " days. Please goto http://changepass.com and reset"
objMessage.Send
End Sub

' +++++++++++++++++++ End of Script +++++++++++++++++

ปล. ผมได้ comment ในส่วนที่ใช้ส่ง email ไว้ ถ้าจะให้ส่งเมล์ก็เอา comment ออกได้เลยครับ

วันพุธที่ 16 มิถุนายน พ.ศ. 2553

WebEx คืออะไร??

WebEX คือ หนึ่งในเครื่องมือที่ช่วยเพิ่มประสิทธิภาพการสื่อสารให้ดียิ่งขึ้นซึ่งประกอบด้วย feature ต่างๆ เช่น การประชุม การสัมมนาทางไกล ผ่านทางหน้าเว็บไซต์ โดยที่อีกฝ่ายไม่จำเป็นต้องเดินทาง เราสามารถที่จะนัดหมายการประชุมได้ล่วงหน้า เป็นการสื่อสารแบบ real-time ที่รองรับได้ทั้งภาพวีดีโอ เสียง รวมไปถึงการแลกเปลี่ยนข้อมูล นอกจากนั้นเรายังสามารถทำ presentation และทำงานร่วมกับ applications ต่างๆ ได้อย่างมากมาย จากที่กล่าวมาเราสามารถนำคุณสมบัติของ WebEx ไปประยุกต์ใช้ในงานต่างๆ ได้อีกมากมายเช่น Online-Training, Virtual Classroom รวมไปถึง Remote Cooperate โดยที่กล่าวมาทั้งหมดสามารถทำงานผ่านหน้าเว็บไซต์ได้โดยตรงโดยที่ไม่ต้องดาวน์โหลดซอฟต์แวร์หรือติดตั้งฮาร์ดแวร์ใดๆ เพิ่มเติม

วันเสาร์ที่ 12 มิถุนายน พ.ศ. 2553

คิดซักนิดก่อนรับใครเป็นเพื่อนบน Social Network

ทุกวันนี้เป็นที่ยอมรับว่าหากใครไม่มี account บนเว็บเครือข่ายสังคมต่างๆ เช่น Facebook, Hi5 หรือ twitter คนๆ นั้นเข้าข่ายเชยอย่างมาก ประโยชน์ของเว็บเครือข่ายสังคมเหล่านี้ก็มีไม่น้อย เช่น ทำให้เราได้เจอะเจอเพื่อนฝูงที่ไม่ได้เจอกันนานมากตั้งแต่สมัยประถม รวมไปถึงการใช้ติดตามข้อมูลข่าวสารของบ้านเมืองได้อย่างรวดเร็ว อันตรายหรือความเป็นส่วนตัวต่างของข้อมูลส่วนบุคคลที่มีคนพูดถึงมามากมายให้เราตระหนักในการกรอกข้อมูล และเปิดเผยอย่างจำกัดนั้นผมคงไม่พูดถึงแล้ว คาดว่าคงสามารถหาอ่านเพิ่มเติมกันได้ง่าย แต่จะเล่าให้ฟังถึงปัจจัยเสี่ยงอีกอย่างหนึ่งของการรับบุคคลที่เราไม่รู้จักมาเป็นเพื่อนบนเครือข่ายสังคม ปัจจุบันผู้ให้บริการมักจะเขียนโปรแกรมให้เพิ่มความฉลาดโดยการแนะนำคนที่คาดว่าจะรู้กับเรามาให้เรา add เข้าไปเป็นเพื่อน ทั้งๆ ที่ในบางครั้งเราเองก็ไม่รู้จักกับบุคคลเหล่านั้น มันเคยมีคดีที่มีเด็กผู้หญิงถูกล่อลวงผ่านเครือข่ายสังคมตามที่เป็นข่าวทางโทรทัศน์ วิทยุ หนังสือพิมพ์มาแล้ว





ดูๆ ข่าวข้างบนแล้วอาจจะไกลตัวเกินไปหน่อยนะครับ แต่แนวทางการสืบสวนสอบสวนนั้น ทางเจ้าหน้าที่เค้าจะสืบจากรายชื่อของเพื่อนที่ผู้ตกเป็นเหยื่อ add ไว้ทั้งหมดนั่นแล่ะครับ และการที่เราไปรับเพื่อนแปลกหน้าเข้ามาเป็นเพื่อนเยอะๆ นั้น เราอาจจะตกเป็นผู้ต้องสงสัยโดยไม่รู้ตัว แน่นอนครับเราอาจจะไม่เกี่ยวข้องกับคดี แต่เมื่อถึงเวลาหากถูกเชิญตัวไปสอบปากคำมันคงเป็นเรื่องน่ารำคาญและเสียเวลาไม่น้อยเลยใช่มั้ยล่ะครับ

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

วันจันทร์ที่ 10 พฤษภาคม พ.ศ. 2553

การวิเคราะห์ความปลอดภัยสำหรับ Windows 2003 Server


วันนี้จะมาเล่าเกี่ยวกับวิธีการตรวจสอบความปลอดภัยบนเครื่องที่ติดตั้งด้วย Windows 2003 Server อย่างง่ายๆ นะครับ เนื่องจากจะต้องลองทำและเห็นว่าเอกสารส่วนใหญ่ยังเป็นภาษาปะกิตอยู่ แต่ที่จริงหัวข้อนี้ก็หาอ่านได้ทั่วๆ ไปนะครับโดยลอง search ผ่าน google ดูก็ได้ แต่วันนี้ผมขอเอามาสรุปเป็นภาษาไทยพอเข้าใจก็แล้วกันครับ
1. ขั้นแรกเลยไปที่ desktop แล้วคลิ้กที่ Start -> Run แล้วพิมพ์ mmc ในกล่องข้อความ Open แล้วกด OK ได้เลยครับ

2. หลังจากกด OK แล้ว จะปรากฎหน้าต่างดังภาพที่ 2 เพื่อให้เราเพิ่ม Snap in โดย Security Configuration and Analysis ใน Microsoft Management Console (MMC) ที่เราเปิดนี้ จะวิเคราะห์และจัดเก็บค่าเกี่ยวกับความปลอดภัยต่างๆ ของเครื่อง เพื่อนำไปเปรียบเทียบกับเทมเพลตมาตรฐานที่มีความปลอดภัย โดยขั้นตอนต่อไปให้เลือกที่ File -> Add/Remove Snap-in

3. ในหน้าต่าง Add/Remove Snap-in ให้เลือกปุ่ม Add

4. หลังจากนั้นให้เลือกที่ Security Configuration and Analysis แล้วกดปุ่ม Add

5. แล้วกด Close หน้าต่าง Add/Remove Snap-in หน้าต่างแรก และกด OK ที่หน้าต่างที่สอง

6. คลิ้กขวาที่ Security Configuration and Analysis แล้วเลือก Open Database…

7. พิมพ์ชื่อ database ในช่อง File name: แล้วคลิ้ก Open

8. หลังจากนั้นจะปรากฏหน้าต่างเพื่อให้เราเลือกเทมเพลตที่ใช้ในการเปรียบเทียบการตั้งค่า หากเรามาเทมเพลตของเราตามมาตรฐานขององค์กรอยู่แล้วก็สามารถเลือกไฟล์นั้นได้ หากไม่มี Microsoft เองก็มีเทมเพลตมาตรฐานให้เราเลือกใช้งานอยู่บ้างแล้ว

9. คลิ้กขวาที่ Security Configuration and Analysis อีกครั้ง แล้วเลือก Analyze Computer Now…

10. จากนั้นให้เลือกตำแหน่งในการจัดเก็บไฟล์ error log หลังจากนั้นกด OK เพื่อเริ่มวิเคราะห์ข้อมูล

11. หลังจากที่เครื่องวิเคราะห์ผลเสร็จแล้วจะจัดเก็บผลให้อยู่ในกลุ่มต่างๆ โดยเราสามารถคลิ้กเพื่อขยายดูรายละเอียดผลการตรวจสอบตามหมวดหมู่ได้ โดยผลการตรวจสอบนั้นจะมี Pass หมายถึง การตั้งค่าของระบบปัจจุบันเป็นไปตามข้อกำหนดของเทมเพลตที่เราได้เลือกไว้, Fail หมายถึง การตั้งค่าของระบบปัจจุบันไม่เป็นไปตามข้อกำหนดของเทมเพลตที่เราได้เลือกไว้ และ Not Analyzed, Not Defined หมายถึง ระบบที่ตรวจสอบ หรือเทมเพลตที่นำมาใช้เปรียบเทียบยังไม่ได้มีการตั้งค่าไว้ หรือไม่ต้องการจะตรวจสอบค่านั้นๆ


เรียบเรียงจาก: “Windows Server 2003 System Security Analysis 'Quick and Easy” http://www.windowsecurity.com