No phone for me

ผมอยากได้ netbook แต่ผมไม่ได้ต้องการ netbook…

ทั้งหมดทั้งมวลที่ผมต้องการคืออุปกรณ์ขนาดเล็กที่สุดที่ผมจะพิมพ์งานได้ มันไม่ต้องใช้งาน Word รุ่นใดๆ ไม่ต้องจอใหญ่ พลังประมวลผลสูง

แต่ผมต้องการ full sized keyboard…

เนื่องจากไม่ได้ต้องการอะไรมากไปกว่านั้น และการซื้อ netbook ที่คีย์บอร์ดเต็มก็ดูจะแพงบรรลัยสำหรับผม ทางเลือกที่ดีกว่าคือ…

[Apple Wireless Keyboard](http://store.apple.com/th/product/MB167LL/A?fnode=MTY1NDA1Mg&mco=MjE0Njk2Mg)

ข่าวดีคือมันต่อกับ Symbian ได้ผ่านทาง Driver ของ Nokia

ข่าวร้ายคือมันเปลี่ยน Layout ไม่ได้ นั่นหมายถึงมันพิมพ์ภาษาไทยไม่ได้เลย

จากการหาข้อมูลใน Windows Mobile ไม่พบข้อมูลใดๆ เพิ่มเติมในเรื่องนี้

ส่วนใน Android นั้นยังเป็นวุ้นอยู่ใน Cupcake

ซื้อ N810 มาลง Jaunty ดีกว่าวุ๊ย….

 

Address Space Layout Randomization

วันนี้เจอเรื่องประหลาดที่ไม่ค่อยได้เจอเยอะ เอามาจดเอาไว้

ปัญหาสำคัญในเรื่องของความปลอดภัยของซอฟต์แวร์คือเวลาที่โปรแกรมเมอร์ทำงานพลาด แล้วปล่อยให้แฮกเกอร์เอาโค้ดอื่นๆ มารันในซอฟต์แวร์ตัวเองได้ เช่นบั๊ก Buffer Overflow แฮกเกอร์มักหาทางไปต่อด้วยการหาคำสั่งอื่นๆ โดยเฉพาะพวก System Call ที่สร้างความเสียหายให้กับระบบ หรือเปิดช่องโหว่อื่นๆ ขึ้นมาเรื่อยๆ ง่ายๆ เช่นการสั่ง system() นั้นหมายความว่าแฮกเกอร์จะทำอะไรก็ได้เท่าที่ user ที่รันโปรแกรมนั้นทำได้

ตาม Murphy’s Law แล้ว โปรแกรมที่มีบั๊กนั้นมักจะรันใน root เสมอ

ในดอสนั้นปัญหาอย่างนี้เกิดง่ายมาก เพราะว่าตำแหน่งของ System Call ต่างๆ นั้นตายตัว ถ้าอ่านคู่มือของ OS มาเยอะๆ ก็จะรู้ทันทีว่าควร Jump ไปยัง Address ไหนเพื่อเรียก System Call อะไร เรียกว่าเจาะเข้า process ได้ปุ๊บก็เรียบร้อยกันไปเลย

แล้วอย่างนั้นจะทำยังไงดี

ตอบแบบกำปั้นทุบดินก็คงเป็นว่าไปบอกโปรแกรมเมอร์ให้เขียนโปรแกรมไม่มีบั๊ก เหมือนบอกว่านักการเมืองไม่โกงเมื่อใหร่แล้วบ้านเมืองจะดีเอง

ในทางวิศวกรรมมันมีทางออกที่มีปัญญามากกว่านั้น คือการลดความเสียหายเมื่อแฮกเกอร์เจาะเข้ามาในตัว process ได้แล้วนั้น แฮกเกอร์มีโอกาสสำรวจหน่วยความจำของโปรเซสไม่มากนัก เพราะถ้าทำอะไรมากเกินไปก็อาจจะทำตัว process ตายไปเองได้

คิดง่ายๆ คือเอา System Call ไปซ่อนมันซะเลย ทีนี้จะซ่อนมันที่ไหนดี เพราะถ้าถ้าซ่อนแล้วแฮกเกอร์รู้ มันก็ตามไปรังควานอีกจนได้นั่นแล

ในลินุกซ์นั้นเลยคิดอะไรที่ง่ายกว่านั้นคือการวางตำแหน่งของ ไลบราลี, Heap, Stack ฯลฯ ให้มั่วจนเละเทะ ทีนี่เวลาแฮกเกอร์เจาะเข้ามาได้ก็จะเริ่มทำอะไรไม่ถูก เพราะไม่รู้อะไรอยู่ตรงไหน จะไล่กวาดมั่วซั่ว ก็กวาดไปได้แป๊บเดียวก็พลาดไปทำ exception ขึ้นแล้วโปรแกรมก็ segmentation fault ไป

เทคนิคนี้เรียกย่อๆ ว่า ASLR (Address Space Layout Randomization) มันถูกเสนอขึ้นมาครั้งแรกในปี 2001 ถูกเปิดใช้งานเป็นค่ามาตรฐานในลินุกซ์ครั้งแรกในรุ่น 2.6.12 หรือช่วงปี 2005 ส่วนวินโดวส์นั้นใช้งานครั้งแรกตอน Vista และ Windows Server 2008 แต่พบว่ามีปัญหาในการสุ่มอยู่บ้าง และได้รับการแก้ไขใน SP1 ส่วน OS X นั้นรุ่น 10.5 แม้จะมีการสุ่มตำแหน่งไลบราลีบ้างแต่ก็ไม่ได้ทำเต็มที่อย่างเช่น OS ตัวอื่นๆ นัก

อ่อ ลืมไปว่าบล็อกนี้ geek จัด ถ้าอ่านมาแล้วเหมืนออ่านภาษาขอมก็ขออภัยผู้อ่านครับ