התקנת OpenCanary על רספברי פיי

מה זה OpenCanary ואיך אפשר להתקין אותה על רספברי פיי ולשדרג את אבטחת הרשת הביתית או המשרדית.

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

נניח ואני גולש ב-shodan, מנוע חיפוש שבמקום כתובות של אתרים מביא לי כתובות IP פתוחות. אני אדגים עם תוצאה אמיתית שחיפשתי עכשיו בישראל:

מסך תוצאות מ-shodan שיש בו מלא מסכי לוגין של חלונות בחיפוש בישראל.

מדובר בתוצאות של מחשבים שמחוברים מרחוק – אולי מחשבי עבודה, אולי מחשבים בבית, אולי כל דבר אחר. הם אמורים להיות מוגנים בסיסמה, אבל מה קורה אם אני פותח תוכנה מרחוק לחיבור של חלונות – למשל Remote Desktop של מיקרוסופט, מכניס את כתובת ה-IP של אחד מהם ונכנס? אם אני מצליח לנחש את הסיסמה, יש לי גישה מלאה למחשב.

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

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

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

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

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

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

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

התקנת OpenCanary על רספברי פיי

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

רספברי פיי – מבוא והתקנה ראשונית

רספברי פיי – חיבור מרחוק עם SSH

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

עדכון והכנת המערכת

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

sudo apt-get update
sudo apt-get upgrade -y

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

sudo apt-get install git python3-virtualenv python3-dev libssl-dev libffi-dev -y

גם זה יקח קצת זמן. החבילות האלו הן חבילות פייתון שיעזרו ל-OpenCanary לעבוד.

אחרי שהכל הותקן. אנו ניצור תיקיה בשם open-canary מתיקית הבית שלנו ונכנס אליה.

mkdir open-canary
cd open-canary

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

virtualenv .

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

. ./bin/activate

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

סוגריים סביב open-canary ב-shell

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

השלב הבא הוא להתקין סוף סוף את OpenCanary! נקליד:

pip install opencanary

נמתין מעט זמן ו… אם אין בעיות (בד״כ הבעיות קורות בגלל שאנחנו לא בסביבה הוירטואלית – אז שימו לב לזה) הכל יותקן. נקליד opencanaryd –version על מנת לוודא את זה. יש מספר גרסה? אפשר להתחיל לעבוד. ניצור עותק של קובץ הקונפיגורציה עם:

opencanaryd --copyconfig

הפקודה יוצרת עותק של קובץ הקונפיגורציה. אבל לא חייבים ליצור עותק אלא אפשר לעבוד עליו ישירות דרך:

sudo nano /etc/opencanaryd/opencanary.conf

אני מעדיף לעבוד עם עותק מסודר ואעתיק אותו אל התיקיה שלי:

cp /etc/opencanaryd/opencanary.conf .

נריץ את opencanary עם הפקודה:

opencanaryd --start

ו… נקבל קצת פלט אבל – זה עובד!

הערה: כפי שציינתי קוד אפשר לשנות ישירות את /etc/opencanaryd/opencanary.conf וממליצים על זה גם, אבל אפשר כדי להתנסות לשנות את קובץ ההגדרות מקומית ורק כשסגורים על עצמנו לשנות ב-/etc/opencanaryd/opencanary.conf.

תפעול ראשוני

בואו ונראה איך זה עובד. אם תבדקו את קובץ הקונפיגורציה, תראו שיש לנו logger ששומר את המידע בלוג בכתובת:

/var/tmp/opencanary.log

הנה קובץ הקונפיגורציה הראשוני שלי יש:

{
    "device.node_id": "opencanary-1",
    "ip.ignorelist": [  ],
    "logtype.ignorelist": [  ],
    "git.enabled": false,
    "git.port" : 9418,
    "ftp.enabled": true,
    "ftp.port": 21,
    "ftp.banner": "FTP server ready",
    "http.banner": "Apache/2.2.22 (Ubuntu)",
    "http.enabled": false,
    "http.port": 80,
    "http.skin": "nasLogin",
    "https.enabled": false,
    "https.port": 443,
    "https.skin": "nasLogin",
    "https.certificate": "/etc/ssl/opencanary/opencanary.pem",
    "https.key": "/etc/ssl/opencanary/opencanary.key",
    "httpproxy.enabled" : false,
    "httpproxy.port": 8080,
    "httpproxy.skin": "squid",
    "logger": {
        "class": "PyLogger",
        "kwargs": {
            "formatters": {
                "plain": {
                    "format": "%(message)s"
                },
                "syslog_rfc": {
                    "format": "opencanaryd[%(process)-5s:%(thread)d]: %(name)s %(levelname)-5s %(message)s"
                }
            },
            "handlers": {
                "console": {
                    "class": "logging.StreamHandler",
                    "stream": "ext://sys.stdout"
                },
                "file": {
                    "class": "logging.FileHandler",
                    "filename": "/var/tmp/opencanary.log"
                }
            }
        }
    },
    "portscan.enabled": false,
    "portscan.ignore_localhost": false,
    "portscan.logfile":"/var/log/kern.log",
    "portscan.synrate": 5,
    "portscan.nmaposrate": 5,
    "portscan.lorate": 3,
    "portscan.ignore_ports": [ ],
    "smb.auditfile": "/var/log/samba-audit.log",
    "smb.enabled": false,
    "mysql.enabled": false,
    "mysql.port": 3306,
    "mysql.banner": "5.5.43-0ubuntu0.14.04.1",
    "ssh.enabled": false,
    "ssh.port": 22,
    "ssh.version": "SSH-2.0-OpenSSH_5.1p1 Debian-4",
    "redis.enabled": false,
    "redis.port": 6379,
    "rdp.enabled": false,
    "rdp.port": 3389,
    "sip.enabled": false,
    "sip.port": 5060,
    "snmp.enabled": false,
    "snmp.port": 161,
    "ntp.enabled": false,
    "ntp.port": 123,
    "tftp.enabled": false,
    "tftp.port": 69,
    "tcpbanner.maxnum":10,
    "tcpbanner.enabled": false,
    "tcpbanner_1.enabled": false,
    "tcpbanner_1.port": 8001,
    "tcpbanner_1.datareceivedbanner": "",
    "tcpbanner_1.initbanner": "",
    "tcpbanner_1.alertstring.enabled": false,
    "tcpbanner_1.alertstring": "",
    "tcpbanner_1.keep_alive.enabled": false,
    "tcpbanner_1.keep_alive_secret": "",
    "tcpbanner_1.keep_alive_probes": 11,
    "tcpbanner_1.keep_alive_interval":300,
    "tcpbanner_1.keep_alive_idle": 300,
    "telnet.enabled": false,
    "telnet.port": 23,
    "telnet.banner": "",
    "telnet.honeycreds": [
        {
            "username": "admin",
            "password": "$pbkdf2-sha512$19000$bG1NaY3xvjdGyBlj7N37Xw$dGrmBqqWa1okTCpN3QEmeo9j5DuV2u1EuVFD8Di0GxNiM64To5O/Y66f7UASvnQr8.LCzqTm6awC8Kj/aGKvwA"
        },
        {
            "username": "admin",
            "password": "admin1"
        }
    ],
    "mssql.enabled": false,
    "mssql.version": "2012",
    "mssql.port":1433,
    "vnc.enabled": false,
    "vnc.port":5000
}

הבה ונפתח את הלוג ונראה! נכתוב את פקודת tail שמציגה ב״שידור חי״ את כל השינויים הטקסטואליים שיש בלוג:

tail -f /var/tmp/opencanary.log

נוכל לראות שיש שם משהו בסגנון:

{"dst_host": "", "dst_port": -1, "local_time": "2024-09-07 09:15:58.535097", "local_time_adjusted": "2024-09-07 12:15:58.535200", "logdata": {"msg": {"logdata": "Canary running!!!"}}, "logtype": 1001, "node_id": "ran-barzik-secrets", "src_host": "", "src_port": -1, "utc_time": "2024-09-07 09:15:58.535184"}

שזה אומר שיש לנו canary פועל.

בואו ונראה התרעה חיה בשידור חי. נפתח טרמינל נוסף ברספברי פיי או ברספברי פיי אחר שיש לנו ונתקין את תוכנת FTP. למי שלא מכיר – תוכנה להעברת קבצים שעובדת בפרוטוקול מיוחד ובפורט 21.

sudo apt-get install ftp

ננסה להתחבר עם ה-ftp למכונה שלנו. אם אתם מריצים את ה-ftp ברספברי פיי שיש בו את ה-OpenCanary עשו זאת באמצעות:

ftp localhost

אחרי כמה אנטרים של בקשת החיבור וניסיון החיבור, תוכלו לראות שיש אכן התראה בלוג!

{"dst_host": "127.0.0.1", "dst_port": 21, "local_time": "2024-09-07 09:39:46.852010", "local_time_adjusted": "2024-09-07 12:39:46.852203", "logdata": {"PASSWORD": "", "USERNAME": "barzik"}, "logtype": 2000, "node_id": "ran-barzik-secrets-2", "src_host": "127.0.0.1", "src_port": 54478, "utc_time": "2024-09-07 09:39:46.852162"}

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

שינוי הקונפיגורציה ושליחת מייל

אז יש כמה דרכים לשלוח התראות בימינו. אפשר לעשות את זה עם מייל, בדרך כלל זה עובד מעולה עם ג׳ימייל. הרשת מלאה בדוגמאות עם שם משתמש וסיסמה, אבל כיוון שיש לכם אימות דו שלבי (אם אין לכם, עשו עכשיו אימות דו שלבי ואז תחזרו לפה) – זה אפילו יותר קל. צריכים לייצר סיסמה עבור ה-OpenCanary. איך? נכנסים להגדרות גוגל באמצעות הקלדה על הפנים שלנו באחד מהאתרים של גוגל או כניסה לכתובת https://myaccount.google.com

נלחץ על לשונית ה- Security ונבחר ב-2-steps verification.

מתוך גוגל - כניסה לתוך 2 step verification.

במסך הבא, נגלול עד הסוף למטה.

מתוך גוגל - כניסה לתוך App Password

ניכנס וניצור App password. זו סיסמה שנוכל להשתמש בה במקום הסיסמה ל-Gmail שבאמת עדיף שלא תדלוף.

מתוך גוגל - צפייה בסיסמה של Generated app password.

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

איך עושים את זה? בגדול יש שתי דרכים – הראשונה פשוט לשנות את ה-opencanary.conf למשהו בסגנון הזה:

            "handlers": {
                "console": {
                    "class": "logging.StreamHandler",
                    "stream": "ext://sys.stdout"
                },
                "file": {
                    "class": "logging.FileHandler",
                    "filename": "/var/tmp/opencanary.log"
                },
                "email": {
                    "class": "logging.handlers.SMTPHandler",
                    "mailhost": ["smtp.gmail.com", 587],
                    "fromaddr": "[email protected]",
                    "toaddrs": ["[email protected]"],
                    "subject": "OpenCanary Alert",
                    "credentials": ["[email protected]", "kaka lebn abcd aged"],
                    "secure": []
                }
            }
        }
    },

השניה, שזה מה שסביר להניח שתעשו – זה להעתיק את opencanary.conf ל-ChatGPT או LLM אחר ולהעביר לו את סיסמת דמו של ה-App (לא את הסיסמה האמיתית אבל משהו שיהיה לכם קל להחליף אליו), החשבון שלכם בג׳ימייל והחשבונות שאתם רוצים לשלוח אליהם והוא יבצע את התיקונים. כל מה שאני צריך לעשות זה למחוק את opencanary.conf הישן ולהכניס את opencanary.conf החדש שה-LLM נותן לי.

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

מייל התראה על כניסה מ-FTP

שינוי Mac Address

אני מאמין שאתם מכירים, אבל מי שלא – מדובר בכתובת הפיזית של כרטיס הרשת (קווי או אלחוטי) של המכשיר במקרה הזה רספברי פיי. הכתובת הזו יכולה להסגיר שהקנארי שלנו היא קנארי מתחזה ולא איזה אוצר בלום של מידע. למה? כי כל יצרן מקבל תחילית משלו. למשל התחילית של רספברי פיי היא C4:85:08 בדרך כלל. אם תוקף (או יותר נכון סקריפט) מסתובב ומתחיל לרחרח, הוא יכול לראות שמדובר ברספברי פיי ולא להכנס. על מנת לראות את ה-MAC Address של החיבור הפעיל שלכם, יש להקליד:

ip link show

ולראות את התוצאה – יש לנו שני חיבורים ברספברי פיי – eth0 שהוא החיבור הקווי ו-wlan0 שהוא החיבור של הוויפיי. החיבור הפעיל יוצג:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DORMANT group default qlen 1000
    link/ether C4:85:08:42:22:01 brd ff:ff:ff:ff:ff:ff permaddr dc:a6:32:c5:25:06

פה אפשר לראות את ה-MAC address של היחידה: C4:85:08:42:22:01

איך אני משנה אותו? יש כמה שיטות, אני מעדיף להשתמש בשיטה בדוקה וקצת איטית אבל כזו שלא תעשה נזקים ובלגנים וגם תעבוד תמיד. החלק הכי חשוב הוא לבחור MAC Address אחר, אני בחרתי ב-00:11:32:42:22:01 שהוא של שרת קבצים. אפשר וצריך להעזר פה ב-ChatGPT ועוזריהם.

בגדול אנו נתקין כלי לשינוי ה-Mac Adress וניצור שירות שיפעיל אותו בכל פעם שהרספברי פיי עולה.

אם אתם בסביבה הוירטואלית של פייתון, צאו ממנה באמצעות deactivate.

נתקין את macchanger

sudo apt-get install macchanger 

אחרי ההתקנה נשאל אם אנו רוצים להחליף MAC. סמנו כ-״לא״

שאלה אם להפעיל את ה Macchanger אוטומטית. התשובה היא לא.

אחרי ההתקנה, ניצור קובץ שמפעיל אותו. נקליד:

sudo nano /etc/network/if-up.d/macchange

ונכניס את התוכן הבא – אם אתם מחוברים עם אינטרנט קוי, החליפו את wlan0 ב eth0 וכמובן החליפו את 00:11:32:42:22:01 ב-MAC Address שלכם.

#!/bin/sh
if [ "$IFACE" = lo]; then
      exit 0
fi
sudo /usr/bin/macchanger -m 00:11:32:42:22:01 wlan0

נאפשר הרצה של הקובץ:

sudo chmod 755 /etc/network/if-up.d/macchange

ונתחיל ביצירת ה-service. נקליד:

sudo nano /lib/systemd/system/macchange.service

ונכניס את הטקסט הזה:

[Unit]
Description=MAC Address change
After=multi-user.target
After=syslog.target
After=network.target
[Service]
Restart=always
ExecStart=/etc/network/if-up.d/macchange
[Install]
WantedBy=mutli-user.target

זהו! ה-service מוכן. עכשיו נפעיל אותו ונדאג שהוא יעלה בכל פעם שהרספברי פיי עולה:

sudo chmod 644 /lib/systemd/system/macchange.service
sudo systemctl daemon-reload
sudo systemctl enable macchange.service
הרצה של ip show וצפייה ב-MAC Address החדש.

הפעלה של OpenCanary באופן אוטומטי

עם כל ה-rebootים האלו, אפשר לראות שה-OpenCanary שלנו לא מתרומם כל פעם וצריך להפעיל אותו ידנית. אנו רוצים שהוא יעלה אוטומטית גם לאחר ריסטארט אז בדיוק כמו ה-MacChanger, אנו ניצור לו service. אבל יש פה קצת catch. למה? כיוון ש-OpenCanary מאזין לפורט 22 ויהיו לנו התנגשויות אם ננסה להעלות אותו באופן אוטומטי. אנו נצטרך לשנות את פורט ה-SSH שלנו לפורט אחר. אפשר משהו רנדומלי כמו 2523 למשל.

איך עושים את זה?

הקלידו את הפקודה:

sudo nano /etc/ssh/sshd_config

הורידו את ה-# לפני ה-22 ומשנים את 22 למה שרוצים. למשל ל-2523 ואז שומרים ומקלידים:

sudo service ssh restart

מהנקודה הזו, אנו נכנס לרספברי פיי עם ssh -p 2523 HOSTNAME ולא עם ssh רגיל שמקונפג לפורט 22.

השלב הבא הוא להפעיל את

sudo nano /lib/systemd/system/opencanary.service

ונכניס את הקוד שלעיל – שימו לב היטב לשורה המודגשת שמכילה את הנתיב המדויק של ההתקנה – אצלכם זה יהיה שונה, אלא אם כן שם המשתמש שלכם הוא barzik 😂

[Unit]
Description=OpenCanary Service
After=network.target

[Service]
ExecStart=/home/barzik/open-canary/env/bin/opencanaryd --dev
StandardOutput=journal
StandardError=journal
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

אחרי שהכנסתם את הטקסט הזה, נשמור ונצא.

נפעיל את שלוש הפקודות האלו:

sudo chmod 644 /lib/systemd/system/opencanary.service
sudo systemctl daemon-reload
sudo systemctl enable opencanary.service

ו… זהו! נפעיל מחדש את הרספברי פיי ונראה שיש גם בלוג וגם במייל התראה על זה שהוא הופעל.

שימו לב שכאן הוא לוקח את ההגדרות ישירות מ-etc.

סיכום

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

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

פוסטים נוספים שכדאי לקרוא

גלילה לראש העמוד