ყველაზე ძვირიანი კოდი, NASA-ს სტანდარტები და რისკიანი პროგრამისტები

როვერის ნაფეხურები მარსზე, რომელიც არსაიდან იწყება.

სულ მაინტერესებდა, როგორ წერენ უზარმაზარ წარმატებულ პროგრამებს შეცდომების გარეშე, მაგალითად მარს როვერი “Curiosity”, რომელიც მარსზე გაფრინდა, 8 თვეში გაიარა 350 მილიონი მილი, დაეშვა 6 მილის რადიუსში, უცხო გარემოში დადის და დედამიწაზე გზავნის მონაცემებს.

 

როგორ გაუშვეს როვერი მარსზე

ინტერნეტში არის ერთ-ერთი უიშვიათესი ტექნიკური ხასიათის გამოსვლა მარს როვერის შესახებ. ნასას JPL – Jet Propulsion Laboratory ლაბორატორიის ერთ-ერთი მთავარი მეცნიერი, Gerard Holzmann აღწერს, თუ როგორ ცდილობდნენ პროგრამირების პროცესის წარმართვას, რომ მაქსიმალურად აეცილებინათ პრობლემები.

მოკლედ ვიტყვი რამდენიმე ფაქტს ვიდეოდან:

  • დაახლოებით 4 მილიონი ხაზი კოდი, 100-ზე მეტი მოდული, 120 ნაკადი ერთ პროცესორზე (+1 ბეკაპი). ხუთი წელი და 40 პროგრამისტი. ყველაფერს კი ერთი მომხარებლისთვის და პირველივე გამოყენებაზე უნდა ემუშავა.
  • უფრო მეტი კოდი იყო, ვიდრე მთელი წინა მარსის მისიების ერთად აღებული. ასეთი ზომის გამო ადამიანური კოდის რევიუები აღარ მუშაობდა ეფექტურად.
  • შემოიღეს რისკების შესამცირებელი სტანდარტი და მუდმივად ამოწმებდნენ ავტომატური ხელსაწყოებით. იმის გამო, რომ ადამიანები არ კითხულობდნენ და იცავდნენ დოკუმენტებს ასობით წესებით, ჩაატარეს გამოკითხვა და გამოარჩიეს ათი ყველაზე მნიშვნელოვანი წესი: Power of ten
    მაგალითად: ნუ გამოიყენებთ რეკურსიას, goto-ს და მსვლელობის სხვა რთულ კონსტრუქციებს; მონაცემების ხედვის არე (scope) იყოს მინიმალური; ყველა ციკლს ჰქონდეს ფიქსირებული საზღვრები; პოინტერის მხოლოდ ერთი განმისამართება გააკეთეთ, ფუნქციის პოინტერებს ნუ გამოიყენებთ; ა.შ.
  • ყოველ ღამე ხდებოდა კოდის დაბილდვა, სტატიკური ანალიზი და სხვადასხვა ავტომატური ტესტირება. ღამე იმიტომ, რომ 15 საათი სჭირდებოდა ანალიზს.
  • ვინც ბილდს გააფუჭებდა, დაჯარიმდებოდა და ბრიტნი სპირსის პლაკატს გამოაკრავდა თავის კუბში. ხოლო ვინც ბევრ warning-ებს დატოვებდა კოდში, “სირცხვილის კედელზე” მოხვდებოდა. როგორც ჩანს ნასაშიც კი სჭირდებათ ადამიანებს მოტივაცია წესების დასაცავად 😀
  • სპეციალური ტრენინგის და სერტიფიცირების გარეშე არ უშვებდნენ კოდთან ადამიანს.
  • ითხოვდნენ 100% code coverage-ს. ვისაც გაუკეთებია ეს, მიხვდება თუ რა შრომატევადი ამოცანაა 100%, რადგან არარსებული სცენარების გატესტვაც მოუწევთ – მაგალითად if-ების ისეთი განშტოებები, რომელიც შეუძლებელია ოდესმე შესრულდეს.
  • კოდის რევიუ არ იყო ხანგრძლივი ჯგუფური შეკრება. იკრიბებოდნენ მხოლოდ უთანხმოების განსახილველად. შენიშვნები და მითითები ერთმანეთში სპეციალური პროგრამის გამოყენებით იცვლებოდა, რომელიც კოდის სხვადასხვა სტატუსებსაც აჩვენებდა წინა ღამის შემოწმებიდან.
  • კომპილატორიდან და სტატიკური ანალიზიდან 0 warning უნდა ყოფილიყო, რაც საკმაოდ რთული შესასრულებელი აღმოჩნდა და დიდი დრო დასჭირდა. უცნობია კორელაცია ამ პუნქტის შესრულებასა და პროექტის წარმატებულობას შორის, თუმცა ეს ყველაზე სუფთა კოდი იყო, წინა მისიებთან შედარებით.
  • კრიტიკულ ნაწილებში იცავდნენ MISRA პროგრამირების სტანდარტს – რომელიც ძრავების და სასიცოცხლო მნიშვნელობის აპარატურაში გამოიყენება.
  • კრიტიკული ქვესისტემებისთვის ლოგიკურ ვერიფიკაციას აკეთებდნენ – მათემატიკურად ამტკიცებდნენ ალგორითმის სისწორეს.

ამ მისიაში დაინტერესებულებისთვის კიდევ ერთი გამოსვლა არსებობს (თუმცა მე პირველი უფრო მომეწონა): CppCon 2014: Mark Maimone “C++ on Mars: Incorporating C++ into Mars Rover Flight Software”

 

სტანდარტის დარღვევაზედ

ინტერნეტში ცნობილი შემთხვევებიდან ყველაზე ძვირიანი კოდი Space Shuttle-ისთვის დაიწერა – 1000$/ხაზი. მაგრამ 2013 წელს ტოიოტამ სასამართლო წააგო და კომპენსაციის თანხით თუ დავთვლით დაახლოებით 1200$ დაუჯდა თითო ხაზი. ტოიოტას უნებური აჩქარების პრობლემა არაერთხელ მოხვდა სიახლეებში ავტო ავარიების და საჩივრების გამო. ხან ხალიჩები გაიწვიეს უკან, ხან გაზის პედლები, მაგრამ საკმარისი არ აღმოჩნდა. მერე NASA-ს გუნდმა შეამოწმა გაზის კონტროლის პროგრამა ტოიოტას მანქანაზე და, მართალია, თავიანთ სტანდარტთან შედარებით 243 დარღვევა ნახეს, მაგრამ საბოლოოდ ვერ დაადასტურეს, რომ პროგრამის შეცდომის ბრალი იყო. სასამართლოს გარე ექსპერტად ერთი ტიპი ჰყავდა, რომელმაც მიწასთან გაასწორა ტოიოტას კოდი, უწესო რეკურსიაო, სტეკ ოვერფლოუვო და კიდევ ათასი რაღაც.

თუმცა ბოლო ბოლო მგონი მაინც არ იყო ზუსტი განაჩენი გამოტანილი პროგრამისთვის. მთლიანი ქეისი აქ არის: A Case Study of Toyota Unintended Acceleration and Software Safety

 

ჩვენ, უბრალო მოკვდავი პროგრამისტები

კონსტრუქტორის არასწორად დაწერა ჯავასკრიპტში

თურმე პროგრამისტები ძალიან ბევრს ვრისკავთ 🙂 ვენდობით ოპერაციულ სისტემას, გარე ბიბლიოთეკებს, არ ვამოწმებთ ფუნქციიდან დაბრუნებულ მნიშვნელობას ვალიდურობაზე. მართალია, მომხმარებლის მიერ შეყვანილ მონაცემებს ვფილტრავთ, მაგრამ ვაკეთებთ კი იგივეს, როცა სხვადასხვა სერვისს ვესაუბრებით? ეს ბუნებრივია ჩემი აზრით, ყველა შემთხვევის შემოწმება ძალიან შრომატევადი და შესაბამისად ძვირი პროცესია. შეგიძლიათ გადახედოთ Defensive programming სტრატეგიებს.

არსებობს პროგრამები, რომელსაც შეცდომა თითქმის არ მოსდის, მაგრამ თუ მოუვა უზარმაზარს ზარალს მოიტანს. ანალოგიურად არსებობს ისეთებიც, რომელშიც ხშირად ხდება შეცდომა, მაგრამ მარტივი და იაფი ჯდება მისი გასწორება. დაახლოებით ისე, როგორც მანქანებში – იშვიათად გაფუჭებული BMW-ს შეკეთება ძვირია, ამერიკას კი ომის დროს ჰყავდა Willys MB ჯიპები, რომელსაც დაზიანებისას ძალიან სწრაფად აღადგენდნენ. საერთოდ შლიდნენ და ისე გადაჰქონდათ აქეთ-იქით. ვიდეოც არის ინტერნეტში, სადაც კანადელი ჯარისკაცები 4 წუთში შლიან და აწყობენ მთელ მანქანას.

ჩვენი პროგრამების უმრავლესობაც წესით ამ მეორე კატეგორიას მიეკუთვნება. მთავარია ცვლილების შეტანა სწრაფად და იაფად შევძლოთ, თორემ ეგეთი კოდიც თუ ძვირი დაუჯდათ, აღარ დაგვიკვეთავენ 😀

რუსული ვირუსია და ყურადღება უნდა მივაქციოთ

Facebook-ზე ბოლო დროს ძალიან გავრცელდა უკვე და თან სულ ქართულ გვერდებზე და ქართველ მომხმარებლებზეა მომართული ეს ვირუსი. მხვდება გაზიარებული ბმულები, რომელზე დაჭერითაც ნამდვილი საიტის მაგივრად გადადის archiveshare.net/… ასეთ მისამართზე. თქვენც შეგხვდებოდათ ალბათ.

თუ თქვენ გააზიარეთ ლინკი და facebook-ზე მის ქვეშ სხვა დომენი დაიწერა, ეს ნიშნავს რომ თქვენს ბრაუზერში Webarchive-ის პლაგინია ჩაწერილი და ის ცვლის ნამდვილ მისამართს სხვა მისამართით. დარწმუნებული ვარ რომ მომხმარებლების 99%-ისთვის ეს განზრახ არ ხდება და ამიტომ მინდა რომ ყურადღება მივაქციოთ.
მაგალითად ამ სურათზე:
webarchive.pro virus

სხვადასხვა სახელით შეიძლება შეგხვდეთ, უმეტესად რუსული .ru დაბოლოებებით.
როცა სხვა ადამიანი ცდილობს შემდეგ თქვენს ლინკზე გადასვლას, გამოდის ასეთი გვერდი:
webarchive.pro virus

ყურადღება მიაქციეთ ზევით ლინკის მისამართს.
ამის გამო ბევრს მათი facebook-ის გვერდიც აქვს მონიშნული –
https://www.facebook.com/ge.archiveshare.net
მე მაინც მგონია რომ მხოლოდ ფანჯრის დასახურად დააჭირეს like-ს ამ გაურკვეველი წარმომავლობის გვერდზე და თუ თქვენც ასე მოიქეცით, გირჩევთ გადახვიდეთ მაგ ბმულზე და unlike გააკეთოთ, რადგან მაგ გვერდზე გაზიარებული ყველა ლინკი ისევ ვირუსს შეიცავს.

როცა მომხმარებელი ხურავს იმ პატარა ფანჯარას, გადავდივართ ასეთ გვერდზე, რომელიც ბრაუზერის extention-ის დაინსტალირებას გვაიძულებს.
webarchive.pro virus

ყველანაირი მცდელობა რომ შავი ეკრანი მოვაცილოთ და ტექსტი წავიკითხოთ ისევ პლაგინის ინსტალაციას ცდილობს. მაგალითად chrome ბრაუზერი ასე გეკითხებათ ინსტალაციის ნებართვას და თან წერს თუ რა უფლებებს ითხოვს პლაგინი:
Read and change all your data on the websites you visit (შეუძლია წაიკითხოს და შეცვალოს ყველანაირი ინფორმაცია საიტზე რასაც გახსნით)
Manage your apps, extensions, and themes (შეუძლია მართოს თქვენი ბრაუზერის პროგრამები, პლაგინები და თემები)
Communicate with cooperating websites (შეუძლია ინფორმაცია გაცვალოს თანამშრომელ საიტებთან)
!!!!!!!!!!!

რბილად რომ ვთქვათ ეს ყველა პუნქტი აძლევს ძალიან ცუდ ძალაუფლებას ამ პლაგინს და აძლევს ინფორმაციას ყველა იმ გვერდიდან რასაც ბრაუზერში ხსნით.

webarchive.pro virus

როცა ვინმე გახსნის თქვენს გაზიარებულ ბმულს, ვერ იცილებს თავიდან ამ პლაგინის მოთხოვნებს და ეთანხმება. შემდეგ უკვე ამ ადამიანის ბრაუზერიდან გაზიარებული ლინკები ხვდება ამ პლაგინის ხელში და ასე ვრცელდება ვირუსი..

როგორც თავის საიტზე წერენ, webarchive.pro არის არქივი, სადაც ინახება ყველა ის გვერდი რომლიც გააზიარეთ. ამასთან, აქვთ გამოქვეყნებული მომხმარებლის უფლებების გვერდი, რომლის მიხედვით თქვენი დათვალიერებული გვერდების და თქვენი კომპიუტერის შესახებ ანონიმურად იგზავნება სტატისტიკა. წერენ, რომ პროგრამამ შეიძლება თქვენს დაუკითხავად დამატებით დააინსტალიროს საჭირო რაღაცები, ჩაგისვათ უსაზღვრო რაოდენობის რეკლამები და ბანერები საიტებზე, ა.შ. და პლაგინის დაინსტალირებით ამ ყველაფერს ეთანხმებით ფაქტიურად (ალბათ იურიდიული ძალაც აქვს).
სრულად შეგიძლიათ წაიკითხოთ: http://archiveshare.net/ext/eula
ეს სურათი მაგ გვერდის ფრაგმენტია.

webarchive.pro virus

მე თუ დამიჯერებთ, პირველ რიგში ეს პლაგინი უნდა წაშალოთ ბრაუზერებიდან და აღარასდროს დაეთანხმოთ. ხოლო თუ ისევ დაინახავთ ეგრე გაზიარებულ ბმულს, კარგი იქნება რომ უთხრათ ავტორს მაგ ვირუსის შესახებ.
ქრომის შემთხვევაში მისამართის გრაფაში აკრიფეთ chrome://extensions/ შემდეგ სიაში მოძებნეთ ეგ პლაგინი და წაშალეთ.
სხვა ბრაუზერებზე თქვენ გეცოდინებათ ალბათ, მე ქრომს ვიყენებ. ნებისმიერ შემთხვევაში შეგიძლიათ მომწეროთ და მოგეხმარებით წაშლაში.

ჩემი სემინარი თსუ-ში 2: ვებ სერვისები (SOAP, REST)

🙂 როგორც ჩემს წინა პოსტში ვწერდი, წინა შაბათს – 22 იანვარს სტუდენტურ სემინარებზე ჩემი ”მოხსენება” იყო ვებ აპლიკაციის უსაფრთხოებაზე.

ეს არის დაპირებული ბმული პრეზენტაციაზე, ხოლო ეს არის თვითონ სემინარის შინაარსი. თუ ვინმე ნახავს და შენიშვნები ექნება ან ჩათვლის რომ ვიტყუები 😀 გთხოვთ, დამიკომენტარეთ და გავასწორებ.

ამ შაბათს კი (29 იანვარს ისევ 5 საათზე) ისე მოხდა, რომ ისევ მე ვკითხულობ სემინარს და თემა შეეხება ვებ სერვისებს.

ისევ დავიწყებ შედარებით საბაზო სტრუქტურით და შესავლით, ხოლო შემდეგ ვისაუბრებ SOAP და REST არქიტექტურის მქონე სერვისებზე.

ჩემი სემინარი თსუ-ში: ვებ აპლიკაციის უსაფრთხოება

რამდენიმე თვის წინ თბილისის სახელმწიფო უნივერსიტეტის კომპიუტერული მეცნიერების მიმართულების სტუდენტებმა ერთ საინტერესო წამოწყებას ჩაუყარეს საფუძველი : D

სტუდენტები ამზადებენ მათთვის სასურველ თემას და შემდეგ სხვა სტუდენტებს უტარებენ სემინარს.

მაგალითად აქამდე ჩატარდა სემინარები:

  • HTML5-სა და HTML4–ს შორის განსხვავება და ახალი API–ები (ნინო ლომინეიშვილი)
  • HTML5: Drag & Drop (მარიამ ხუნჯგურუა)
  • HTML5 Web Storage (შოთა ბაკურაძე, არჩილ ვარშანიძე)
  • Mobile Device Game Architecture (გიორგი აბელაშვილი)
  • Introduction to Android development (ირაკლი მანაგაძე)
  • Facebook for developers (დავით თვალჭრელიძე, გიორგი მაისურაძე)

სემინარების შესახებ ინფორმაცია ქვეყნდება ხოლმე facebook-ზე.

ამ შაბათს, ანუ 22 იანვარს (როგორც ყოველთვის 17:00 საათზე ბიოლოგების კორპუსის 421-ე აუდიტორიაში) იქნება ჩემი სემინარი 😀

რომელიც ვებ აპლიკაციის უსაფრთხოებას შეეხება.

დავიწყებ სულ საბაზო სტრუქტურის მიმოხილვით, თუ როგორ არის ქსელში მოწყობილი კლიენტისა და ვებ აპლიკაციის ურთიერთობა და რატომ არის ისეთი, როგორიც არის (HTTP პროტოკოლი, HTTP request / response, სესიები).

ხოლო შემდეგ განვიხილავ რა საფრთხე შეიძლება იყოს სისტემის თითოეულ ფენაზე – ვებ სერვერის მხარეს, გზაში, კლიენტის მხარეს.

შევეხები თემებს: Injecting OS commands / SQL / scripting languages, Directory traversal, Remote file inclusion, Persistent / Non-persistent XSS attack, Cross-site tracing და საშიში HTTP მეთოდები,  DDoS attack, Brute force, და კიდევ რამდენიმე, თუ არ გამომაგდეს აუდიტორიიდან 😀

ესეც ანონსი..

p.s. იმედი მაქვს ვინმე არ გადაწყვეტს დაამტკიცოს რომ აზრზე არ ვარ უსაფრთხოების და ხვალ ჩემი ბლოგი ცოცხალი დამხვდება :  D ჩვეულებრივი ვორდპრესია და ბეკაპების გარდა არაფრისთვის ვიწუხებ თავს.

სტეგანოგრაფია

“When cryptography is outlawed,
bayl bhgynjf jvyy unir cevinpl.”

ზედმეტია იმაზე ლაპარაკი, თუ რა მნიშვნელობა აქვს ინფორმაციის დაცვას დღეს 🙂 მით უმეტეს როდესაც საქმე გვაქვს გლობალურ თუ ლოკალურ ქსელებთან. აქედან გამომდინარე არსებობს უამრავი მეთოდი ინფორმაციის უსაფრთხოდ მიმოცვლისთვის.

მაგალითად შეგვიძლია დავშიფროთ, მაგრამ დღეს კრიპტოგრაფიაზე არ მექნება საუბარი.
არა დაშიფვრაზე, არამედ მის დამალვაზე.

თუ ხელმისაწვდომია სიმბოლოების ასეთი მიმდევრობა:

ce794b2ffb7bccdc2f77586b5bf8cb9213d037a
cd4c87ffa833fe4dd578345a210e643683cffb1
3898b7099f8a145272515a77b11555f7f8391d

გასაგებია, რომ მისი გარდაქმნით შეგვიძლია ორიგინალი აღვადგინოთ როგორმე. უფრო დაცული იქნება მასში ჩადებული ინფორმაცია, თუ საერთოდ არ გვეცოდინება მისი არსებობის შესახებ.

როდესაც კრიპტოგრაფიის ამოცანაა ამოკითხვის შესაძლებლობა არ მისცეს მესამე პირს, სტეგანოგრაფია – ეს არის ინფორმაციის დამალვის მეცნიერება. მას ძველი ბერძნებიც წარმატებით იყენებდნენ (მაგალითად  შიკრიკს თავზე ტატუირებას უკეთებდნენ და აცლიდნენ თმის გაზრდას. დანიშნულების ადგილზე მისვლის დროს კი ისევ აჭრიდნენ თმას :))) და შეტყობინებას ნახულობდნენ)

ვიკიზე მოყვანილია ფოტო:

ამ ფოტოს თითოეული ფერის კომპონენტს (RGB) თუ მოვაცილებთ ყველა ბიტს ბოლო ორის გარდა და შემდეგ სიკაშკაშეს (brightness) გავზრდით 85-ჯერ, მივიღებთ სულ სხვა ფოტოს:

სხვადასხვა გზით ინფორმაცია შეგვიძლია დავმალოთ mp3, wav, jpg, bmp, gif, au … ფორმატის ფაილებში.

აი, თუნდაც .bmp.  24-ბიტიანი bitmap ფაილი ავიღოთ. 

სურათის თითოეული პიქსელის თითოეულ ფერი (R,G,B) ინახება 8 ბიტში. ანუ თუ ავირჩევთ ერთ ფერს – მაგალითად R წითელი, მისი 28 განსხვავებული ვარიანტი იარსებებს.  ამ ორს – 11111111 და 11111110 – შორის კი განსხვავება ისეთი მცირეა, რომ ადამიანის თვალი ვერ შეამჩნევს. ასე რომ თუ თითოეული პიქსელის წითელის ბიტების ბოლო ბიტში ჩვენს ინფორმაციას შევინახავთ, თვალით ცვლილების აღქმა თითქმის შეუძლებელი იქნება. რა თქმა უნდა მეორე მხარემ უნდა იცოდეს სადაა ინფორმაცია დამალული და როგორ.

 

ჯერ ვერ მოვაბი თავი, რომ პრაქტიკულად ჩავატარო ექსპერიმენტები, მაგრამ როდისმე მოვიცლი და შედეგებს დავწერ…