ארכיון חודשי: מרץ 2011

הבנת אבטחת מידע בנוגע ל SIP

לאחרונה גוברת המודעות לצורך לאבטח מערכות מבוססות VoIP ו SIP בפרט, בייחוד אחרי שמקבלים מכה קשה בארנק לאחר גניבת שיחות. אותם אנשים פונים אלי, היות והעסק שלי מתמחה בעבודה מול המרכזייה החכמה – אסטריסק, בשביל למצוא מענה כלשהו לבעיה זו.

הבעיה היא אבל שאנשים מצד אחד רוצים להגן על המערכת, אבל מצד שני לא רוצים לעשות שום שינוי בעבודה שלהם. כלומר הם רוצים שהכל ישאר כמו שהוא רק שפתאום במטה של קסם בעיית גנבת השיחות תעלם להם כלא היתה.

אז צרך להבין שאי אפשר לאכול את העוגה ולהשאיר אותה שלמה. כלומר לא ניתן לאבטח מערכת שהיא חשופה לגמרי ברשת ! צריך להבין כי יש צעדים שונים שצריך לנקוט בהם בשביל לקבל את האפקט, וזה אומר בין הייתר כי אופן השימוש שלכם במערכת צריך להשתנות מקצה אחד לשני.

נתחיל מהסוף. SIP הוא פרוטוקול Voice Over IP אשר אומר כי הוא מעביר מידע אודות השיחה וההתנהלות שלה מצד אחד לצד שני, אבל הוא לא אחראי למה שקורה בשיחה, אלא רק למידע שמנסה ליצור את השיחה ומה מתרחש בשיחה. כלומר הוא מעביר אותות שונים אודות השיחה בלבד (משהו בסגנון של צליל חיוג, תפוס, לא זמין וכו' לאנשים הפחות טכניים שקוראים את הפוסט).

הבעיה היא ש SIP חשוף לגמרי בעולם, כלומר המבנה שלו הוא clear text אשר גלוי לכל מאזין ומקשיב.  המתחכמים יגידו עכשיו שאם הוא היה בינארי אז הכל היה תקין, אבל התשובה היא "אז זהו שלא". הבעיה היא שהוא חשוף בעולם ולא בזה שהוא גלוי. כלומר גם מידע בינארי אפשר להשתמש ולשנות, הרי יש לפחות עוד צד אחד שצריך לפרש את המידע, ולכן המידע הבינארי עדיין צריך להיות בר פירוש, ואז עדיין אפשר לגנוב שיחות באותה מידה.

אז איך כן אפשר להגן על SIP ?

דבר ראשון תעשו סיסמה חזקה ומיוחדת לשלוחה שלכם.

בנוסף, תשימו את ה SIP שלכם בפורט לא רשמי, וזה יפחית את כמות הסורקים האוטומטיים נגדכם, אבל עדיין לא מגן עליכם מפני גניבה כלשהי.

מAsterisk גרסה 1.8, אפשר להשתמש במנהרת SSL להצפנה, אבל זה תלוי גם בתמיכה של הטלפוני SIP בצד השני, ואם הם תומכים בגישה הזו. אבל זה לא פותר את בעיית הגניבה, אלא רק את בעיית "אדם באמצע" (Man In the middle), אשר לא יוכל להאזין למה שקורה, אבל כן לנסות ליצור שיחות בעצמו ולהתחבר בעצמו.

עוד דרך היא לעבוד עם VPN מאובטח. הבעיה היא ש iPhone ללא פריצה אינו מסוגל לעשות דבר כזה למעט SSL VPN של חברת fortigate (אשמח לגלות שאפל מאשרים ליותר vpn מאובטחים לעבוד על הצעצוע שלהם), וAndroid דורש גישת root להתקנה של מרבית ה VPN כדוגמת openvpn, כך שצריך אנשים טכניים בשביל לגרום לדברים לעבוד, ומשתמש "פשוט" שלא רוצה להבין טכנולוגיה ולא רוצה לשנות את דרכיו ורק רוצה שהכל יעבוד בשבילו לא יכול לקבל כלום.

עוד דרך, אשר לא תמנע Man In the Middle אבל תגן על המרכזייה שלכם מגניבת שיחות היא שימוש בכתובת IP קבועה. אז מה עושים אנשים עם כתובת מ DHCP או מבית קפה ? ובכן תמצאו מקום טוב יותר להיות בו, או שתעבדו עם VPN, כל כך "פשוט".

עוד דרך נוספת, היא להשתמש במערכות אשר חוסמות ניסיונות מרובים להתחבר למרכזייה מכתובות או מקבוצה של כתובות אל המארכזייה ללא הצלחה לאורך זמן מסויים.

יש בישראל ובעולם חברות המציעות לנטר לכם את התעבורה במרכזייה ולהגיד לכם שווקטור התקפה מסויים פוגע לכם במרכזייה.
אני אישית מאמין ששינוי מנהגי העבודה שלכם והבנת הבעיות ואיך להימנע מהם יעזרו יותר, מאשר לגלות בדיעבד או אפילו בזמן אמת שכרגע מישהו מנסה לתקוף אותכם, ואם אתם לא מכנים לשנות את גישת העבודה שלכם, ובכן הכיס שלכם יכאב כאשר תדרשו לשלם את התוצאה, והאשמה היא שלכם ולא של מי שמנסה לאבטח לכם את המערכת.

נא להכיר את לזרוס 0.9.30

בשעה טובה ובאיחור של מספר חודשים שוחררה לה גרסה חדשה של לזרוס: 0.9.30.

הקדמה

אז אם אתם לא מכירים את לזרוס, אז אתם מפסידים הרבה מאוד. לזרוס היא סביבת עבודה משולבת המשוחררת בקוד פתוח והיא פשוט מדהימה. יש לה המון יכולות לסייע לכם לתכנת בצורה מאוד פרודקטיבית אבל היא לא תתערב לכם בעבודה אלא אם תבקשו ממנה ממש יפה (שילוב של מקשים או העכבר).

הסביבה מספקת המון תכונות כמו תכנות גרפי, אפשרות ליצור אפליקציות לטלפונם סלולריים, תכנות CGI לאתרי web, יצירת דו"חות, גרפים, ואפילו דפדפני web משל עצמכם והרשימה עוד ממשיכה. אם זה לא מספיק היא מספקת אפשרות ליצור אפליקציה אחת שתרוץ בהרבה מאוד פלטפורמות כדוגמת Windows, Linux, Mac, BSD, iPhone, Android, Maemo/MeeGo, Windows Mobile והרשימה עוד ממשיכה… ואם מעניין אותכם, אז הנה מספר קטן מאוד של אפליקציות אשר מבוססות על השימוש בלזרוס. יש כאמור עוד אפליקציות שלמות אשר לא נכנסו לרשימה, אשר חלקן אפילו נמכרות בחנות האפליקציות של אפל וגוגל.

מה חדש בגרסה 0.9.30 ? להמשיך לקרוא

BGRABitmap

Example of BGRABitmapזוכרים שהזכרתי את LazPaint ? אז אחד הדברים שבאמת מדהימים שם הוא ספרייה בשם BGRABitmap. זו ספרייה שמשוחררת בקוד פתוח, אשר מספקת תמיכה ב"מפת סיביות" (כלומר תמונה מבוססת פיקסלים ולא לינארית) חוצה פלטפורמות אשר מספקת תמיכה בהרבה מאוד תכונות מתקדמות של תכנות גרפי, כדוגמת עבודה עם אלפא (גם אם ה widget כדוגמת GTK2 אינו תומך בזה), עבודה עם "שכבות",  הוספה ומחיקה של פיקסלים, יצירת ציור עם ובלי antialiasing, קואורדינטות מבוססות נקודה צפה, רוחב קו בנקודה צפה, מילוי מדורג של תוכן והרשימה עוד ארוכה.

במידה ואתם רוצים ללמוד איך לבנות בצורה תכנותית את התמונה בצד ימין (שנעשתה בצורה תכנותית), אז אתם מוזמנים לגשת למדריך שנכתב בויקי בנושא.

FPC כ shell script

נשאלה שאלה ברשימת הדיוור של FPC איך אפשר לקחת קוד שכתוב איתו, ולגרום לו להיות כמו bash, perl, ruby וכו', כלומר ש bash ידע להריץ אותו למרות שמדובר בקוד המקור בלבד.

כלומר עבור קוד שנראה כזה:

#!/usr/bin/fpcscript
program testscript;
Var
 I : Integer; 

begin
 Write('Testscript called as ');
 For I:=0 to ParamCount do
   begin
    if I>0 then
     Write(' ');
    Write(paramstr(i));
   end;
 writeln;
end.

bash ידע שצריך להריץ אותו בצורה רגילה, כלומר:

$ ./testscript

אז ישבו והציעו המון רעיונות מעניינים, ובסוף מיכאל כתב את הקוד הבא (יש לדעתי צורך בכמה שיפצורים קטנים):

{$mode objfpc}{$h+}
program fpcscript;

uses sysutils,classes,baseunix, unix;

Const
 BufSize = 10 * 1024;
 Comment = '//';

Type
 TStringArray = Array of string;

Var
 F1,F2 : TFileStream;
 FN : String;
 Args : TStringArray;
 E,I : integer;

begin
 E:=127;
 F1:=TFileStream.Create(ParamStr(1),fmOpenRead);
 try
   FN:=GetTempFileName(GetTempDir,'fpc')+'.pp';
   F2:=TFileStream.Create(FN,fmCreate);
   try
     F2.WriteBuffer(Comment[1],Length(Comment));
     F2.CopyFrom(F1,F1.Size);
   finally
     F2.Free;
   end;
   if (ExecuteProcess('/usr/bin/fpc',[FN])=0) then
     begin
     If FileExists(ChangeFileExt(FN,'.o')) then
       DeleteFIle(ChangeFileExt(FN,'.o'));
     SetLength(Args,ParamCount-1);
     For I:=2 to ParamCount do
       Args[I-1]:=Paramstr(i);
     E:=ExecuteProcess(ChangeFileExt(FN,''),Args);
     If FileExists(ChangeFileExt(FN,'')) then
       DeleteFile(ChangeFileExt(FN,''));
     If FileExists(FN) then
       DeleteFile(Fn);
     end;
 Finally
   F1.Free;
 end;
 Halt(E);
end.

דרושים ל GSOC 2011

גוגל פרסמו את רשימת הפרוייקטים לGoogle Summer Of Code 2011 או GSOC בקיצור. לשם שינוי נכנס משחק שהרבה ממנו כתוב עם FPC וקצת גם ב++C, האסקל ועוד כמה טכנולוגיות.

אז אם אתם יודעים לעבוד עם Object Pascal ובעלי ניסיון פיתוח לאנדרואיד ו/או לiOS, אז אתם מתאימים לדרישות המשחק. אה, וגם אם אתם מפתחים בשאר השפות 🙂

צפייה ברשימה

דיברתי על פקד "עץ" באחד הפוסטים הקודמים, ולפני שאדבר על החלק השני עם עוד פקד של "עץ", החלטתי לדבר על פקד TListView היות ופקד ה"עץ" הבא, יודע להיות שניהם.tlistview

פקד ה TListView הוא עוד פקד בקבוצה של רשימות, והוא שכן של פקד העץ ברשימת הרכיבים בלזרוס. הוא מאפשר לנו לקבל תחושה של "שולחן עבודה" עם קבצים שונים כמו שאנחנו מכירים בWindows ובכמה מנהלי שולחנות עבודה בלינוקס. כלומר רשימה של איברים מפוזרים בצורה מסויימת על גבי המסך, ואפשר לבחור את מה שרוצים בעצם.

dolphin TListView מכיל מספר של מצבי תצוגה ולא רק מצב בודד. הוא מכיל רשימה עם צלמיות גדולות, רשימה עם צלמיות קטנות, רשימה לבד, ורשימה עם פרטים. בנוסף הפקד מאפשר לנו להשתמש ב checkbox על מנת לסמן איברים, דבר המזכיר מאוד את הגישה של Dolphin ב KDE.

הרשימה עם הפרטים מכילה עוד מידע על כל איבר ואיבר, וכן כותרות לכל דבר כזה באמצעות עמודות. אם אתם זוכרים את הפקד ה"עץ" של GTK, אז הוא מספק גם את זה כחלק מהיכולות שלו למעשה.

הפעם החלטתי לעשות משהו טיפה יותר רציני, וזה לנצל את כל 4 מצבי התצוגה של הפקד, ולכן הכנתי גם מערך קוד שאפשר להוריד אותו, וגם עשיתי "על הדרך" שימוש בRTTI ולהמיר את השמות התכנותיים ("סמלים") של המניה אשר מכילה בעצם את מצב התצוגה למחרוזת, והשתמשתי בקוד הזה, בתכונה שנכנסה לfor בגרסה 2.4.2 של FPC, כך שזו הגרסה המינימלית שתהיו צריכים בשביל להדר את הקוד שלי הלאה, אבל אם אין ברשותכם את הגרסה הזו או גרסה חדשה יותר, אפשר ממש בקלות להמיר את שורת הקוד הבעייתית מ

for vs in TViewStyle do

ל

for vs := Low(TViewStyle) to High(TViewStyle) do

וזה ימשיך לעבוד בצורה זהה. חשוב להבין כי כל מה שעשיתי בצורה תכנותית (למעט העברת השם של ה"סמל" למחרזות) ניתן לעשות גם בצורה וויזואלית, רק אני העדפתי להציג את הצד התכנותי של הנושא.

כמו שאפשר לראות בתמונה, השתמשתי בעוד פקד שנותן לנו אפשרות לבצע רשימה של TRadioGroup שגם בו השתמשתי רק בצורה תכנותית ולא בצורה וויזואלית, וזה רק בשביל להמחיש בעצם את גישת העבודה, למרות שבפועל סביר להניח שהיינו מכניסים את המידע הזה בזמן תכנון ולא בזמן ריצה, ובכך הקוד שלנו היה גם יעיל יותר.

את הקוד ניתן להורד מהקישור הזה.

תכנות נעים.

PeaZIP

peazipPeaZIP היא תוכנה בקוד פתוח אשר מאפשרת לעבוד עם הרבה מאוד פורמטים (129 לייתר דיוק) של מידע מקובץ, כדוגמת ZIP, ISO, ARJ, RAR, ACE, DEB, RPM, DMG, 7z ועוד… על ידי יצירה של מעטפת גרפית לסביבת שולחן העבודה. התוכנה קיימת ועדיין מפותחת מ2005.

התוכנה מגיעה גם ללינוקס וגם לWindows גם ב32 וגם ב64 ביט, והיא יכולה לרוץ כ standalone או כמערכת מותקנת במערכת ההפעלה.

בלינוקס היא עובדת עם Qt וגם עם GTK2, וניתן להוריד את הגרסה המתאימה. היא יודעת להתממשק לדולפין וקונקרר בKDE בנוסך, וכן להתממשק לנאוטילוס.  בWindows עם הסביבה עצמה, ובכך להיות חלק אינטגרלי מסביבת העבודה של המשתמשים.

בנוסף התוכנה מאפשרת להריץ תוספות שונות עבורה, כך שאפשר להוסיף לה תמיכה של עוד יכולות באמצעות תוספים.

ניתן להוריד את קוד המקור של התוכנה מכאן.

מבט ראשוני על Firebird 3.0

Firebird 3.0 עוד לא יצא, אבל יצאה מצגת המציגה מה הם השינויים העיקריים אשר אמורים להיות בגרסה זו.

הדגשים העיקריים של Firebird 3 הם:

  • תמיכה טובה יותר בריבוי מעבדים ו SMP בכלל, עם cache משותף
  • חידוש הארכיטקטורה לגרסאות הבאות

הדגשים המשניים של Firebird 3 הם:

  • שיפור סקלביליות וביצועים
  • אפשרויות אבטחה נוספות
  • אופטימיזציות טובות יותר לשאילתות
  • תוספות ליכולות הניטור של עבודת מסד הנתונים
  • תוספות לשפת SQL

תוכלו להבין את המשמעות של כל האפשרויות המוזכרות כאן במצגת עצמה, הכוללת גם תרשימים.

צפייה בעץ חלק ראשון

כאשר מבצעים תכנות גרפי (וויזואלי), הרבה פעמים אנחנו מוצאים את עצמנו צריכים ליצור היררכיה כלשהי בצורת עץ של מידע.

לשם כך נוצר פקד מאוד מוכר בשם TreeView אשר לפחות ב GTK הוא גם הבסיס לכל שאר הרכיבים מבוססי הרשימות למינהם. התפקיד של הרכיב הוא לקחת רשימה של עצמים ולהציג אותם, כאשר עצמים מסויימים יכולים גם להציג בנים שונים, ואפילו תמונות שונות בהתאם לצורך.

TTreeViewבלזרוס ודלפי הפקד נקרא TTreeView והוא מכיל פונקציות בעלות הרבה מאוד עזרים חשובים כדוגמת שיוך כתובת זיכרון לעצם כלשהו, שליטה כיצד העצמים יוצגו, בחירה האם עצם מסויים עם בן יהיה פתוח או סגורוהאם הבנים שלו גם יהיו כאלו או לא, גרירה והדבקה של איברים חדשים והרשימה עוד ארוכה.

אז איך מתחילים בעצם ? הולכים ללשונית Common Controls וזורקים במקום המתאים את הפקד של TTreeView. בתכונות שלו אפשר לשחק איתו בשביל שיתאים לצרכים שלנו. בנוסף יש לו תכונה בשם Items. התכונה הזו מאפשרת לנו גם בצורה תכנותית וגם בצורה וויזואלית להוסיף בעצם את האיברים ברשימה. אני אדגים כאן כיצד יוצרים את האיברים בצורה תכנותית, הרי וויזואלית זה מאוד פשוט.

אז במקרה שלנו, זרקתי את TTreeView על החלון, אמרתי לו להיות מיושר לאורך כל החלון, ואמרתי לו שפסי הגלילה יופיעו שניהם רק כאשר יש צורך לכך.

בקוד של החלון ב OnCreate יצרתי את הקוד הבא:

procedure TForm1.FormCreate ( Sender : TObject ) ;
var
  i : byte;
  Node : TTreeNode;
begin
  for i := 1 to 20 do
    begin
      Node := TreeView1.Items.Add(nil, 'Test ' + IntToStr(i));
    end;
end;

הקוד עושה פעולה מאוד פשוטה, רץ על כל המספרים מ1 ועד 20 ומוסיף את האיברים אל הרשימה עם מספור של האיבר עצמו. אנחנו שומרים את האיבר שנוצר ב TTreeNode לשימוש עתידי. שמתי בפרמטר הראשון של Add את הערך nil בשביל לציין שהאיבר שנוצר אינו אח של איבר אחר (שגם הוא מסוג המחלקה של TTreeNode).

אבל עכשיו יש לנו רשימה של 20 איברים, אבל הם עריריים ללא ילדים. בשביל לדאוג לכך שיהיו להם ילדים נגיד לItems להוסיף ילד לאיבר שיצרנו באמצעות AddChild אשר דומה מאוד ל Add הרגיל, אבל יוצרת בן. בשביל להשיג את התוצאה כמו בתמונה למעלה, הקוד המלא נכתב בצורה הבאה:

procedure TForm1.FormCreate ( Sender : TObject ) ;
var
  i : byte;
  Node : TTreeNode;
begin
  for i := 1 to 20 do
    begin
      Node := TreeView1.Items.Add(nil, 'Test ' + IntToStr(i));
      if i mod 2 = 0 then
        begin
          TreeView1.Items.AddChild(Node, 'Sub Test');
          if i mod 4 = 2 then
            Node.Expand(False);
        end;
    end;
end;

וזו הגישה הפשוטה ועם פחות העצמה שיש לעבודה בעצים. בחלק הבא נכיר עוד פקד לעצים הקיים ללזרוס ודלפי שהוא עם הרבה יותר עצמה ויותר מעניין.

בישראל 2011 מדינה שולטת בך

אם אתם עדיין מדברים עם שימי מהאח הגדול ויודעים בקושי שמצרים החליפה לה מנהיג בהפגנות המוניות, וכרגע בלוב הורגים את האזרחים שלא אוהבים את המנהיג הדגול והנערץ, אז פספסתם משהו.

מדינת ישראל החליטה לצאת לפיילוט לא חוקי של הנפקת תעודות ביומטרית שהולכים יד ביד עם מאגר. המעשים נעשים תוך כדי עבודה בסודיות מוחלטת אשר מזכירה סטארטאפ הנסתר אל המתחרים, ולא נותנים לאף אחד להציץ ולדעת מה קורה, עד שדלפו להם כמה פרטים מעטים מהפילוט, ספק אם במכוון או לא, אבל זה לא כזה משנה, היות וזו תוספת של עוד מחטפים שונים כמו ניסיון להשתיק פעילות פוליטית אשר לא נראת לחלק מחברי הכנסת, הצהרת נאמנות למדינה, איסור הטלת חרם על ישראל על ידי תושבי ישראל, וזו רק הרשימה הקצרה של פעולות שנראות לי כחלק מהריסת הדמוקרטיה הישראלית, וזה למרות שאין לי שום קשר פוליטי לשום דבר (אני לא סובל את כל צדדי הפוליטיקה באותה מידה).

נראה על פניו כי ישראל הולכת לצעוד לקראת דיקטטורה "נאורה" מאשר דמקורטיה "נאורה", אשר אם אתם מקורבים לשלטון תוכלו להנות מפירות ההצלחה, אבל אם אתם רחוקים, ובכן אתם לא קיימים יותר…

עירא כבר כתב הרבה מאוד על מה שיש להגיד על התעודות הביומטרית, אז כל מה שנשאר (כבר אמרתי את זה פעם) זה להתחיל להעיר את כולם רגע לפני, ממש כמו שהעירו את שימי … ו"תודה רבה" למי שמשתף אותי בפרטים הלא חושבים האלו בפגישות עסקים וזה נתקע לי בראש ולא יוצא 😦