‏הצגת רשומות עם תוויות services. הצג את כל הרשומות
‏הצגת רשומות עם תוויות services. הצג את כל הרשומות

יום שישי, 3 באוגוסט 2012

Denial Of Service Attacks




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

Syn Flood Attack
הטכניקה הפשוטה והמהירה ל Denial Of Service , הרעיון שעומד מאחורי ההתקפה הזו הוא מאוד פשוט, ראינו בעבר כיצד ניתן להזריק "חבילות"  לרשת (למי שכבר שכח...) , התוקף שולח חבילה מכתובת מזוייפת שמכילה דגל מסוג SYN (בקשה לסינכרון) , הקורבן מנסה ליצור קשר עם הכתובת המזוייפת וממתין לתשובה עד להגדרת ה Time Out שמוגדרת במערכת.


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


#:iptables -N syn-flood
//limit to 100 connection with 100 more in reserve for burst before start to drop
#:iptables -A syn-flood -m limit --limit 100/second --limit-burst 100 -j RETURN
#:iptables -A syn-flood -j LOG --log-prefix "SYN-flood attempt: "
#:iptables -A syn-flood -j DROP


Smurf Attack
לא יודע למה בחרו דווקא בשם הזה, אבל שיהיה, התוקף שולח הודעת BoardCast של (ICMP (ping שמכילה את הכתובת של הקורבן ואת הכתובת של ה BroadCast, ה BroadCast שולח את ההודעה לכל המחשבים שבתחום שלו , והם מחזירים לקורבן תשובה ובכך מעלים את התעבורה אצל הקורבן עד ל  Denial Of Service.



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

Xmas Attack
זו התקפה שמנצלת חולשה בפרוטוקול TCP בדומה ל Syn Flood גם פה מדובר במשחק עם דגלים, התוקף שולח חבילה שמכילה את הדגלים URG , PUSH ו FIN שהקומבינציה בניהם לא אפשרית מבחינת פרוטוקול TCP מה שעלול לבזבז זמן יקר לפענוח המידע.

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

Ip Fragmentation Attacks
קבוצה של התקפות שמנצלות חולשות במבנה החבילות שעוברות בפרוטוקול TCP/IP ועלולות לגרום לתופעות מוזרות על הקורבנות, קשה מאוד לדעת מה בדיוק היו התופעות מה שבטוח יהיה מעניין, כבר עברתי בעבר על מבנה ה IP Header, הפעם אנחנו נתייחס לפרמטרים מאוד ספציפיים.



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



MTU - Maximum Transmission Unit
גודל המקסימלי של חבילה לפני שהיא יוצאת לרשת, כמו שאמרתי כל כרטיס וההגדרה שלו, ניתן לשנות אותו דרך מערכת ההפעלה בכל מקרה אל תתעסקו איתו רק תדעו שהוא שם, אפשר למצוא אותו ע"י הקלדה של הפקודה הזו ב CMD:

C:\>netsh interface ipv4 show subinterfaces

Total Length
בדרך כלל מכיל את גודל החבילה אבל ברגע שיש Fragmentation הוא מכיל את גודל ה Fragment.

MF - More Flag
דגל שאומר אם החבילה הזו היא חלק ממערך חבילות שצריכות להגיע או שהיא חבילה בודדת, אם הערך של הדגל 1 זה מצביע על כך שיש עוד חבילות בדרך שצריכות להתחבר אחת עם השנייה  על מנת לקבל את החבילה המקורית במלואה, במקרה שהערך 0 זו חבילה בודדת או סוף של מערך חבילות.

Fragment Offset
המקום של Fragment ביחס לשאר ה datagram, לדוגמה: אם החבילה שלנו מתחלקת ל 2 חתיכות, החתיכה הראשונה תתחיל במיקום 0 ותהיה בגודל 2500 בתים, בחבילות הבאות מחושב מיקום ה Offset בצורה הבאה:

NextOffset= (Total Length - IP header) / 8 + PreviousOffset
NextOffset= 310

אחרי שהכרנו את הפרמטרים נהפוך אותם לרשעים שישחקו לטובתנו, מה היה קורה אם שולחים חבילה שה Offset גדול \ קטן מהמידע שנשלח? מה היה קורה אם נעביר את ה More Flag ל 0 למרות שלא השלמנו את כל ה Datagram , או שנשלח את אותו Offset פעמים? האמת שאין לזה תשובה כלכך ברורה וכל חומרה מתנהגת אחרת, למידע נוסף.

Ping Of Death
אחת ההתקפות הוותיקות מתקופת windows 95 , שליחת חבילות Ping גדולות שמכניסות את הקורבן ל Denial Of Service, ההתקפה הזו כבר לא רלוונטית לימינו אבל ההיתי חייב להזכיר אותה ,יש לי זכרונות טובים ממנה.

DDOS - Distributed Denial Of Service
ברוכים הבאים לממלכת הזומבים, הממלכה ההרסנית ביותר, DDOS נחשבת לאחת ההתקופות החזקות ביותר, אין כלכך מה לעשות מול התקפה כזו חוץ מלחכות שתיגמר, ההתקפה הזו משלבת בתוכה בין עשרות למליונים של מחשבים שנקראים זומבים שמחכים לפקודה של התוקף, הממלכה הזו נקראת BotNet שהיא מרכז בקרה עבור התוקף על הזומבים שלו, כל אחד יכול להיות זומבי, מספיק שהרצתם את הקובץ הלא נכון ונדבקתם באיזה Trojan שפתח שער לתוקף, מדובר על התקפות בדומה ל Syn Flood רק שהיא יוצאות מהמון מחשבים באותו זמן, DDOS נחשבת לאחת הסכנות לבטחון האינטרנט.

Denial Of Service - Exploits
אני לא ארחיב במאמר זה, אבל מדובר על חולשות אבטחה בשירותים שמריץ הקורבן שמאפשר להכניס אותו ל Denial Of Service בצורה הבטוחה והמהירה ביותר, בשונה משאר ההתקפות שעברתי עליהם, ההתקפה הזו מסובכת יותר ויש לחפש את החולשה המתאימה לשירותים שמריץ הקורבן, לדוגמה: פגיעה בשירותי ה Apache / IIS ע"י חולשות אבטחה יעודיות עבור אותם שירותים, נעבור על זה במאמר הבא בנושא.

סיכום:
ראינו המון סוגים של Denial Of Service ועדיין לא ראינו את כולם, על מנת לבצע התקפת DOS טובה יש לחקור היטב את הרשת של הקורבן ולמצוא את ההתקפה המתאימה ביותר, התקפות מסוג זה מאוד מטרידות, במיוחד עם משולב BotNet שעלול להפיל גם שרתים מאובטחים ביותר.

כלים למחקר ניתן להוריד מפרויקט HackToolsBox.

בהצלחה...

יום שבת, 2 באפריל 2011

Mssql BackUp Application From Sketch

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

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

אפשרויות גיבוי בעזרת Microsoft Sql Server 2005 :
בחנתי את צורת הגיבוי ב Mssql , זה נראה פשוט מאוד, לחצן ימני על ה Database שאנחנו רוצים לגבות:


השלב הבא הוא להגדיר לאן לשמור את קובץ ה Bak שזה פורמט הגיבוי עבור Mssql.

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


אבל מה בעצם לא ראיתי?
לא ראיתי את האפשרות לשמור לי גרסאות שונות ואם יש לי הרבה Databases העסק יכול להיות מסורבל, מה קורה אם אני רוצה לעשות זאת אוטומטי משרת מרוחק, ואולי גם לקבץ לי אותו ב Zip על הדרך ולשלוח לי אימייל כאשר הגיבוי התבצע, המון מחשבות רצו לי בראש ונראה לי שאני מתחיל להבין מה אני רוצה מהתוכנית הגיבויים שלי.
דרך נוספת שבדקתי היא אפשרות לגבות את הנתונים בעזרת משפט Sql , זה נראה אפשרי בעזרת הדוגמה הזאת:
BACK UP DATABASE db_name TO DISK = N'C:\backup\db_name.BAK'
אבל חסר לי פה מעקב על התהליך אני אף פעם לא יודע מתי הוא סיים ואם הוא סיים לגבות לכן הרעיון להשתמש במשפט Sql ירד משולחן הסירטוטים וההיתי צריך לחפש כיוון אחר...
הישועה הגיעה מה Mssql עצמו מסתבר של Mssql יש SDK רחב מאוד שתומך ב NET. מגרסה 2, יש מספר ספריות שנתנות לנו את האפשרות לשלוט ב Sql Agent שזה הוא ה Service שמנהל לנו את מסדי הנתונים.
Microsoft.SqlServer.ConnectionInfo
ספריה זאת אחראית על ההתחברות והאימות מול השרת.
 
Microsoft.SqlServer.Smo
מכיל מופע למנוע של ה Mssql , ובעצם זאת המחלקה העיקרית שנעבוד מולה.
 
מיקום הקבצים:
 
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\9.0.242.0__89845dcd8080cc91
 
בנקודה זאת הבנתי שמצאתי את מה שאני מחפש, את השליטה , חזרתי לשולחן הסירטוטים והתחלתי לעצב את הרעיון של התוכנית.
 
 
שרת אחד מפעיל בתוכו תוכנית שמתחברת מרחוק למספר שרתים שמריצים Sql Server , בעזרת פקודה מרחוק השרתים מגבים את מסדי הנתונים ישירות ליחידת גיבוי, בשלב הזה הכל כבר נראה ברור , הרעיון שלי מגובש ואפשר להתחיל לכתוב את הקוד, במאמר זה אני יתאר את הקוד שמגבה בלבד למרות שהעלתי עוד רעיונות שיכולים להתלבש על המנגנון הזה אבל אותם אני אשמור לפעם אחרת.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
namespace backup_mssql
{
   class Program
  {
    static void Main(string[] args)
    {
      BackupDeviceItem bdi = new BackupDeviceItem(@"\\storageunit\backup.bak",DeviceType.File);
      Backup bu = new Backup();
      bu.Database = "mydatabase";
      bu.Devices.Add(bdi);
      bu.Initialize = true;
      
      bu.PercentComplete += new PercentCompleteEventHandler(Backup_PercentComplete);
      bu.Complete +=new ServerMessageEventHandler(Backup_Complete);
     
      ServerConnection myconnection = new ServerConnection("192.1.1.1","username","password");
      Server server = new Server(myconnection);
      bu.SqlBackup(server);
      Console.WriteLine("Press any key to continue.");
      Console.ReadKey();
     }

     protected static void Backup_PercentComplete(object sender, PercentCompleteEventArgs e)
    {
      Console.WriteLine(e.Percent + "%.");
    }
   
    protected static void Backup_Complete(object sender, ServerMessageEventArgs e)
    {
      Console.WriteLine(e.ToString());
    }
  }
}

מעבר זריז על קוד מאפשר לנו לראות שתחילה אנחנו מגדירים Device , שבעצם מצביע לנתיב גיבוי חדש ע"ג יחידה חיצונית ברשת, קיימים 2 אירועים - קבלת האחוזים עד להשלמת התהליך , וסיום התהליך, קיימת נקודה חשובה בנוגע ל Device חשוב לזכור שה Sql Server Agent רץ עם הרשאות משלו ולפעמים לא ניתן לרשום את הגיבוי ליעד בגלל הרשאות כתיבה, לכן חשוב מאוד שכל ה Services של ה Mssql ירוצו עם הרשאות שמאפשרות כתיבה ליחידת גיבוי.

כפתור ימני על ה Service של Sql Server Agent אח"כ Log On יאפשר לנו להחליף את ההרשאות של ה Service למשתמש אחר.

בהצלחה...

יום רביעי, 3 בנובמבר 2010

SC - Service Control

מנגנון ניהול Services בשכבות שונות, בעצם מנהל את ה Services של המערכת ומאפשר הוספת Drivers חדשים למערכת, SC מבוסס על ה Command Line:

חיפוש של כל ה Services שנמצאים במערכת:
C:\> sc query type= all
מציג את כל ה Services מסוג Driver.
C:\> sc query type= driver


רישום Driver חדש במערכת:
C:\> sc create mydriver type= filesys binPath= c:\mydriver.sys
הפעלת ה Driver:
C:\> sc start mydirver
הפסקת ה Driver:
C:\> sc stop mydriver
מחיקת ה Driver:
C:\> sc delete mydirver

ניתן לבצע את כל הפעולות על יצירת קובץ Bat  (אצווה), ולהכניס לתוכו את הפקודות שרשמנו.

 sc create mydriver type= filesys binPath= c:\mydriver .sys
sc start mydriver
pause
sc stop mydriver
sc delete mydriver
pause
 
בהצלחה...