Theppitak's blog

My personal blog.

29 มกราคม 2553

Debian Jam

พอดีมีเวลา ก็ไปแจม Debian บ้าง คือไปเสนอแพตช์ใน bsdmainutils เกี่ยวกับคำสั่ง calendar

สำหรับใครที่ยังไม่เคยใช้ มันคือคำสั่งที่เอาไว้ตรวจสอบ ว่าวันนี้และวันข้างเคียงตรงกับวันสำคัญอะไรของประเทศไหนบ้าง หรือเป็นวันเกิดบุคคลสำคัญหรือไม่สำคัญคนไหนบ้าง หรือตรงกับเหตุการณ์สำคัญอะไรในอดีต ฯลฯ เช่น สำหรับวันนี้ (29 ม.ค.):

$ calendar
ม.ค. 29  N'oubliez pas les Gildas !
ม.ค. 29  Bonne fête aux Sulpice !
ม.ค. 29  Adél
ม.ค. 30  Franklin Delano Roosevelt born in Hyde Park, New York, 1882
ม.ค. 30  Mohandas Gandhi assassinated in New Delhi by Hindu fanatic, 1948
ม.ค. 30  Tet Offensive, 1968
ม.ค. 30  Lightnin' Hopkins, the most-recorded blues artist ever, dies, 1982
ม.ค. 30  Aujourd'hui, c'est la St(e) Martine.
ม.ค. 30  Ernennung von Hitler zum Reichskanzler, 1933
ม.ค. 30  Gerda, Martina
ม.ค. 31  Jackie Robinson born, 1919
ม.ค. 31  Hewlett-Packard founded, 1939
ม.ค. 31  "Ham" the chimpanzee soars into space aboard Mercury-Redstone 2, 1961
ม.ค. 31  Explorer I launched, 1958.  Van Allen Belt discovered
ม.ค. 31  Irving Langmuir, 1881, invented tungsten filament lamp
ม.ค. 31  Franz Schubert is born in Lichtenthal, Vienna, Austria, 1797
ม.ค. 31  The Grateful Dead are busted in New Orleans, 1970
ม.ค. 31  Nacimiento Atahualpa Yupanqui, 1908
ม.ค. 31  Koningin Beatrix (1938)
ม.ค. 31  N'oubliez pas les Marcelle !
ม.ค. 31  Bonne fête aux Jean !
ม.ค. 31  Janvier fait le péché,
 Mars en est accusé.
ม.ค. 31  Kapitulation der 6. deutschen Armee in Stalingrad, 1943
ม.ค. 31  Franz Schubert in Lichtenthal bei Wien geboren, 1797
ม.ค. 31  Marcella
ก.พ. 01  First TV soap: Secret Storm, 1954
ก.พ. 01  Forces led by Khomeini take over Iran, 1979
ก.พ. 01  Space Shuttle Columbia (STS-107) disintegrates 15 minutes before landing
 killing Husband, McCool, Chawla, Clark, Ramon, Brown, and Anderson, 2003
ก.พ. 01  RCA Victor unveils the 45 rpm record playing system, 1949
ก.พ. 01  Aujourd'hui, c'est la St(e) Ella.
ก.พ. 01  N'oubliez pas les Viridiane !
ก.พ. 01  À la saint Ignace,
 L'eau est de glace.
ก.พ. 01  Ignác

ในฐานข้อมูลของคำสั่งนี้ มีวันหยุดราชการไทยครบ แต่เผอิญไปตรวจพบว่ามีการระบุวันที่ของวันมาฆบูชา วิสาขบูชา และวันเข้าพรรษาตามปฏิทินสุริยคติ ซึ่งไม่ถูกต้อง พร้อมกับสะกดชื่อวันสงกรานต์ผิด ก็เลยเสนอแพตช์แก้ไป (Debian #566387) และพร้อมกันนั้น ก็เสนอเพิ่มวันสำคัญอื่น ๆ ที่ไม่ใช่วันหยุดราชการเข้าไปด้วย (Debian #566391)

ต่อมา เพื่อหาประสบการณ์ก่อนจัด Mini-DebCamp 2010 ที่ขอนแก่นเดือนมีนา ซึ่งจะมี Bug Squashing Party ด้วย ก็เลยไปแจม BSP Mönchengladbach ทาง IRC เสียหน่อย

จากการสังเกตการณ์ BSP ที่เยอรมันจากระยะไกลครั้งนี้เขาจัดกัน 3 วัน ขอเน้นที่คำว่า วัน เพราะจะไม่ใช่ทำข้ามวันข้ามคืนแบบ codefest เมืองไทย แม้แต่ตอนที่ไป Ubuntu Localisation Sprint ที่ลอนดอนเมื่อ 4 ปีก่อน เขา sprint กันทั้งอาทิตย์ ก็ทำแค่กลางวันเท่านั้น ไม่มีทำข้ามคืนแบบญี่ปุ่นหรือเมืองไทย ซึ่งผมคิดว่าเป็นสิ่งที่ดี การเขียนโปรแกรมไม่จำเป็นต้องทรมานร่างกายกันขนาดนั้น

แต่ขนาดว่าทำกันแค่กลางวัน ก็มาราธอนกันจนเครื่องต้มกาแฟเจ๊ง และมีแซวกันว่าจะเกิด "ม็อบกาแฟ" ย่อย ๆ ขึ้นที่งาน และเขาก็ตั้งใจไล่บี้บั๊กกันจริงจังมาก ภายใน 3 วันนั้น สามารถปิดบั๊ก RC (release-critical) ไปได้กว่า 40 บั๊ก แล้วยัง follow-up, เสนอแพตช์ หรือ downgrade บั๊กต่าง ๆ อีกมากมาย เป็นบรรยากาศที่น่าประทับใจมาก แม้จะเห็นแค่ IRC message

ในเวลาเดียวกัน ก็มี BSP ที่โตเกียว ด้วย แต่จัดแค่วันเดียว ผลงานยังไม่มีการนับ แต่จาก หน้าประสานงานโตเกียว-Mönchengladbach ก็จะเห็นผลงานจากญี่ปุ่นด้วยประปราย แต่เผอิญช่วงที่ผมเข้าไปนั้น ไม่ตรงกับช่วงที่งานที่โตเกียวดำเนินอยู่ เลยไม่ได้เห็นบรรยากาศฝั่งนั้น

เพื่อไม่ให้เสียเที่ยว เลยหาบั๊กมาแจมกับเขาด้วย สุดท้ายก็ได้ติดมือมา 1 บั๊ก (Debian #562945)

16 มกราคม 2553

LibThai Security Update

ผ่านไปเรียบร้อย กับ LibThai 0.1.13 ซึ่งเป็น security update โดยแก้ปัญหา integer/heap overflow vulnerability (CVE-2009-4012, DSA-1971)

ปัญหานี้ Tim Starling ได้รายงานทางเมลส่วนตัวมาที่ผมตั้งแต่ช่วงปีใหม่ แต่กว่าจะได้เริ่มลงมือแก้ก็ผ่านไปเกือบอาทิตย์ เนื่องจากต้องไปเฝ้าไข้พ่อที่ รพ. อยู่ หลังจากที่ได้แพตช์แล้ว ก็ส่งแพตช์กลับไปให้เขาช่วยตรวจทานอีกรอบเพื่อความแน่ใจ เสร็จแล้วก็เริ่มติดต่อทีม Debian Security เพื่อขอ update ใน stable และ oldstable

ทีม security ก็ได้กำหนดหมายเลข CVE สำหรับใช้อ้างอิง พร้อมกับนัดหมาย embargo date มาให้ ในระหว่างนั้น ผมจะแพร่งพรายปัญหานี้ออกไปไม่ได้ แม้แต่ commit public VCS ก็ห้าม (แต่ผมก็พลาด โดยได้ commit SVN ไปตั้งแต่ก่อนติดต่อเขาแล้ว ซึ่งเป็นสิ่งไม่สมควร) เพื่อให้เวลาในการแก้ปัญหานี้ร่วมกับ distro ต่าง ๆ ที่ ship libthai ก่อนที่จะประกาศ release พร้อมกัน ทั้งนี้เพื่อความป้องกันการ exploit ที่จะเกิดขึ้นก่อนที่ผู้ใช้จะมีโอกาสได้ update นั่นเอง

เดิมทีนั้น ผมขอ update แค่ stable (lenny) เพราะแพกเกจใน oldstable (etch) นั้น เป็นโค้ดเก่าตั้งแต่ก่อนรื้อเขียนใหม่มาใช้ libdatrie แต่ทีม security บอกว่าต้อง update oldstable ด้วย เนื่องจาก Debian มีภาระผูกพันที่จะ maintain oldstable เป็นเวลาหนึ่งปีนับจาก stable ออก ก็เป็นอันว่าผมต้องทำงานทั้งหมด 3 ครั้ง ครั้งแรกแก้ที่ upstream trunk, ครั้งที่สอง backport มา lenny และครั้งที่สาม แก้โค้ดเก่าใน etch (ซึ่งครั้งหลังสุดนี้ใช้เวลานานหน่อย เนื่องจากเป็นโค้ดที่โละทิ้งไปแล้ว แถมไม่ใช่โค้ดของผมเองด้วย) แล้วก็ยังมีครั้งท้ายสุดจริง ๆ คือปล่อย upstream release และ upload ขึ้น unstable

ครั้งนี้ ทำให้ได้ประสบการณ์ใหม่:

  • ได้เรียนรู้ระบบการจัดการ security bug ในโครงการซอฟต์แวร์ มีคน blog สรุปเอาไว้ดีพอสมควรครับ กล่าวคือ:
    • ถ้าคุณพบบั๊กที่เกี่ยวกับ security ที่ยังไม่เป็นที่ทราบกันในสาธารณะ คุณควรรายงานผ่านช่องทางพิเศษที่ไม่เปิดเผย (ขึ้นอยู่กับแต่ละโครงการจะกำหนด หรืออาจจะเป็นเมลส่วนตัว) เพื่อให้โอกาสผู้ดูแลได้แก้ปัญหาก่อนที่จะเกิด exploit กับผู้ใช้ เรียกว่าเป็น responsible disclosure (การเปิดเผยข้อมูลอย่างรับผิดชอบ)
    • การปิดบังปัญหานี้ เป็นแค่การปิดบัง ชั่วคราว ในระหว่างแก้ปัญหา เพื่อปกป้องผู้ใช้เท่านั้น ไม่ได้เข้าข่าย security through obscurity แต่อย่างใด หลังจากแก้ปัญหาเรียบร้อย ทุกอย่างก็จะเปิดเผยผ่าน security alert ซึ่งผู้ใช้จะอุดรูรั่วได้ทันท่วงทีก่อนที่จะมี exploit
    • ถ้าบั๊กนั้นเป็นที่ทราบกันในสาธารณะแล้ว ก็ควรมุ่งหาวิธีแก้ทันทีแทน
    • ถ้าบั๊กนั้นมีผลร้ายแรง ก็จะมีการกำหนด embargo date สำหรับปล่อย fix สู่สาธารณะพร้อม ๆ กัน โดยก่อนหน้านั้น ไม่ควรแพร่งพรายปัญหาสู่สาธารณะ
  • social network ต่าง ๆ เช่น twitter, facebook, identi.ca กลายเป็นสิ่งยั่วยวนอย่างมากก่อน embargo date โดยเฉพาะถ้าคุณติดนิสัย tweet ทุกอย่างที่ทำ ควรมีสติเสมอ ถ้าคันปากนักก็หันไปหาสิ่งอื่นที่น่าสนใจ tweet แทน
  • เห็นประโยชน์ของ distributed VCS (เช่น git, bzr, hg) ขึ้นมาทันที เพราะก่อน embargo date นั้น คุณไม่ควร commit โค้ดสู่ public VCS อันจะเป็นการแพร่งพรายปัญหาได้ ถ้าใช้ centralized VCS ก็อาจลำบากหน่อย คือต้อง maintain security patch ต่าง ๆ เอาไว้ในระหว่างที่ commit เรื่องอื่น แต่ถ้าใช้ distributed VCS ล่ะก็ แตก branch หรือ commit แบบ local แล้วไปทำงานส่วนอื่นต่อได้ตามสบาย ขอแค่อย่า push security commit เป็นพอ

ที่สำคัญคือ ผมได้เห็นภาพด้วยตนเองล่ะครับ ว่าซอฟต์แวร์โอเพนซอร์สนั้น มีแง่มุมที่ปลอดภัยอย่างไร ในขณะที่การเปิดซอร์ส libthai ของผม อาจเปิดโอกาสให้ cracker พบจุดโหว่ได้สะดวกขึ้น แต่ในขณะเดียวกัน ก็เป็นการเปิดโอกาสให้ผู้เชี่ยวชาญมาตรวจสอบซอร์สของผม แล้วรายงานให้ทราบเพื่อแก้ไขอย่างปลอดภัยได้เช่นกัน ซึ่งการอุดจุดโหว่นี้ ย่อมทำให้ซอฟต์แวร์ปลอดภัยกว่าไม่ได้อุดแน่นอน แม้ว่าจุดโหว่ที่ไม่ได้อุดนั้นจะซ่อนอยู่ภายใต้ security through obscurity ก็ตาม เพราะมันไม่ได้รับประกันความปลอดภัยจากการตรวจพบด้วยเครื่องมือต่าง ๆ ของพวก cracker เลย

แต่นี่ไม่ได้อ้างว่าซอฟต์แวร์โอเพนซอร์สจะปลอดภัยกว่า 100% นะครับ เพียงแต่ชี้ว่า การพบจุดโหว่ทำให้ซอฟต์แวร์ปลอดภัยได้อย่างไร

ป้ายกำกับ: , , ,

07 มกราคม 2553

Thanks

ขอ ขอบคุณ คุณหน่อย SNC สำหรับของขวัญปีใหม่ เป็นการ หย่อนสตางค์ลงหมวก เพื่อสนับสนุนงานพัฒนาซอฟต์แวร์เสรีของผมอีกครั้งนะครับ ขอให้คุณหน่อยและครอบครัวเจริญรุ่งเรืองในหน้าที่การงาน อุปสรรคใด ๆ ที่เข้ามา ก็ขอให้พ่ายแพ้ต่อกำลังสติปัญญาและความเพียรครับ

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

ป้ายกำกับ:

hacker emblem