לתפוס את הסוד לפני ה-commit: סריקת קוד שלא עוזבת את המכונה
הדליפה הכי נפוצה בעסק קטן היא לא מתקפה מתוחכמת — היא סיסמה או מפתח-API ששוכחים בקוד, נדחפים ל-git, ומשם לכל העולם. רצינו לתפוס את זה ברגע שנכתב, לא שבועיים אחרי הפריצה. אבל היה תנאי אחד בל-יעבור.
התנאי: הקוד לא עוזב את המכונה
הרבה כלי-סריקה מעלים את קוד-המקור שלך לענן שלהם כדי לנתח אותו. עבור עסק ישראלי — עם הקוד, הסודות, ולעיתים מידע-לקוחות — זו בדיוק הבעיה שבאנו לפתור, לא ליצור. לכן הכלל הראשון היה: הסריקה רצה 100% על המחשב של המפתח. הקוד וערכי-הסודות לעולם לא מגיעים לענן שלנו; רק ממצא מעוקר (מזהה-כלל, חומרה, קובץ:שורה, טביעת-אצבע מוסתרת של הסוד — לעולם לא הסוד עצמו) עולה לחלונית הארגונית.
ההחלטה המרכזית: מנוע אחד, לא עשרה תוספים
אפשר היה לבנות תוסף נפרד לכל עורך — אחד ל-VSCode, אחד ל-Cursor, אחד ל-JetBrains, ועוד. זו מלכודת: עשר בסיסי-קוד לתחזק, לוגיקה שמתפצלת, ובאגים שונים בכל מקום. במקום זה בנינו מנוע אחד — קובץ-הרצה סטטי יחיד (Rust) — שמכיל את כל הלוגיקה, וכל "משטח" הוא מעטפת דקה סביבו:
- CLI → git hooks (pre-commit / pre-push) ו-CI
- LSP → קווים אדומים בעורך תוך-כדי-הקלדה (VSCode/Cursor/JetBrains)
- MCP + hook → סוכני-AI (כמו Claude Code) — חוסם סוד לפני שהוא נכתב לדיסק
הלוגיקה נכתבת פעם אחת. אותו כלל בדיוק ששומר על ה-commit שלך שומר גם על ה-CI וגם על מה שסוכן-AI מנסה לכתוב.
מה הוא תופס
הליבה משלבת זיהוי-סודות בסגנון gitleaks (קטלוג ביטויים סדירים) עם מדד-אנטרופיה של שאנון — כדי להבדיל בין מחרוזת אקראית שנראית כמו מפתח אמיתי לבין placeholder תמים כמו "your-api-key-here". מפתחות-AWS, טוקני-GitHub, מפתחות פרטיים, סיסמאות בתוך connection-string, ועוד — כולם מסומנים עם תיקון בעברית והפניה ל-CWE. בהמשך מתווספות סריקת-חולשות עמוקה (Semgrep) וסריקת-תלויות (CVE).
הזווית שאף אחד לא מדבר עליה: סוכני-AI שכותבים קוד
יותר ויותר קוד נכתב היום על-ידי סוכני-AI. הם מעולים — אבל הם גם יכולים "להזות" תבנית לא-מאובטחת או להטמיע סוד בטעות. המנוע שלנו יושב כ-hook על הסוכן: כשהסוכן מנסה לכתוב סוד או חולשה קריטית, ה-hook מסרב — עוד לפני שהתוכן נוגע בדיסק. הפכנו סיכון חדש (AI כותב קוד) לשער-הגנה.
איך בדקנו
הרצנו את הכלי על בסיס-הקוד שלנו עצמו. שני דברים היו חשובים: שהוא תופס סודות אמיתיים (בדקנו עם דוגמאות סינתטיות — AWS, Stripe, connection-string — וכולן נתפסו), ושהוא לא מרעיש על קוד תקין (ה-placeholders נדחו נכון). התוצאה על הקוד שלנו: 100/100 — אפס סודות מוטמעים, כי כולם יושבים במקום הנכון (secret manager), בדיוק כמו שאנחנו ממליצים ללקוחות.
איך אנחנו משפרים את זה — בקרת-איכות מתמשכת
הכלי מריץ את עצמו על כל שינוי-קוד שלנו (CI gate), כולל סריקת-תלויות (SCA) שמזהה אם ספרייה שאנחנו תלויים בה הפכה לפגיעה. הצעדים הבאים: משטחי-העורך (LSP) והסוכן (MCP) לכל לקוח, מנוע-diff שמתריע רק על מה חדש (לא רעש ישן), ותובנת-AI אופציונלית שמסבירה כל ממצא. אותה פילוסופיה: כלי אחד, מקומי, שקוף — הידע נחשף, הקוד נשאר אצלך.
כתבה זו מתארת את הגישה ברמת-עיקרון. אין בה חתימות-זיהוי רגישות, מפתחות, או פרטים שמסייעים לתוקף — להפך, שקיפות המודל היא נקודת-חוזק.
← כל הכתבות