BinaryVision

יוצרים אסימון תוכנה משלנו

מאת בתאריך 11/06/12, תחת כללי

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

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

0345 -> ADEF

4668 -> EEFC

0010 -> BOBC

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

בתוכנה שאנחנו ניצור היום, אנחנו נעשה שימוש בגיבוב וב-Salt בכדי להציג בפני המשתמש אתגר הזדהות נוסף שרק על-ידי תוכנה יחודית לנו נוכל לוודאות כי הוא רשאי גישה אל המערכת. בכדי שהסקריפט הזה יפעל, יש להגדירו כמעטפת של המשתמש, בסוף הסקריפט יש תנאי שאם צלח הוא יקרא ל-/bin/bash

#!/bin/bash
# Software Token by Itzhak Daniel (aka iTK98)
# For Binaryvision, https://binaryvision.co.il
#
# login-token.sh
#
# License, Public Domain.

# Getting random set of letters as init token,
# we will use SHA512 and trim it to 16 letters
# so we won't overwhelm the user.
# Generating INIT_TOKEN
INIT_TOKEN=`dd bs=128 count=128 if=/dev/urandom >/dev/null 2>&1|sha512sum|cut -c13-28`

# Getting the username. It will be part of the
# salt, extra to the pre-defined Salt.
USERNAME=`whoami`
SALT="1234"

# Validating INIT_TOKEN into AUTH_TOKEN
AUTH_TOKEN=`echo "$USERNAME" "$SALT" "$INIT_TOKEN"|sha512sum|cut -c43-58`

echo "Init Token: $INIT_TOKEN"

# Expecting 16 character input from user.
echo "Enter Auth Token:"
read -s -n 16 -N 16 PASSWD

# Checking the input to see if it matches the
# AUTH_TOKEN.
if [ "$PASSWD" = "$AUTH_TOKEN" ]; then
  /bin/bash
  exit 0;
else
  exit 1;
fi

exit 255;

למשתמש נשלח קובץ שיאפשר לו מתוך הפלט שקיבל בעת ההתחברות ליצור אסימון איתו יוכל להשלים את ההתחברות אל המערכת

#!/bin/bash
# Software Token by Itzhak Daniel (aka iTK98)
# For Binaryvision, https://binaryvision.co.il
#
# auth-token.sh
#
# License, Public Domain.

# Not counting on 'whoami' as the local user may
# be different, so you will have to pre-define it.

USERNAME="test"
SALT="1234"

# Getting the INIT_TOKEN from the user.
echo "Enter Init Token:"
read -n 16 -N 16 INIT_TOKEN
# Outputing AUTH_TOKEN.
AUTH_TOKEN=`echo "$USERNAME" "$SALT" "$INIT_TOKEN"|sha512sum|cut -c43-58`
echo ""
echo "Your Auth Token is: $AUTH_TOKEN"

עם התחברות המשתמש למערכת יוצג בפניו האתגר

 Init Token: b8bdf1542850d66d

Enter Auth Token:

והוא יכול להצליח באתגר רק עם הפלט שיקבל מהתוכנה שבידו (auth-token.sh) תהיה תואמת לקלט אשר המערכת (login-token.sh) מצפה לה

Enter Init Token:
b8bdf1542850d66d
Your Auth Token is: c6d40cacde14e217

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

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

:, , ,
2 תגובות:
  1. ניב

    מגניב

השאר תגובה

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: