Skip to content

אוטומציה תלוית-ממשק מול פורטלים של צד שלישי

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

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

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

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

כיצד Triggerfish פותרת את זה

אוטומציה הדפדפן של Triggerfish משלבת Chromium המבוקר על ידי CDP עם ניווט ויזואלי מבוסס LLM. הסוכן רואה את הדף כפיקסלים מוצגים ותמונות מצב של נגישות, לא כעץ DOM. הוא מזהה אלמנטים לפי מה שהם נראים ומה שהם עושים, לא לפי שמות מחלקות CSS. כאשר פורטל מעצב מחדש, הסוכן מסתגל כי טפסי כניסה עדיין נראים כמו טפסי כניסה, תפריטי ניווט עדיין נראים כמו תפריטי ניווט, וטבלאות נתונים עדיין נראות כמו טבלאות נתונים.

ניווט ויזואלי במקום סקריפטי סלקטורים

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

כאשר הסוכן נתקל בטופס כניסה, הוא מזהה את שדה שם המשתמש, שדה הסיסמה, וכפתור ההגשה בהתבסס על פריסה ויזואלית, טקסט placeholder, תוויות, ומבנה הדף. הוא לא צריך לדעת שלשדה שם המשתמש יש id="auth-input-email" או class="login-form__email-field". כאשר מזהים אלה משתנים בעיצוב מחדש, הסוכן לא שם לב כי הוא מעולם לא הסתמך עליהם.

אבטחת דומיין משותפת

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

רשימת השלילה של SSRF מקודדת ולא ניתנת לעקיפה. טווחי IP פרטיים, כתובות link-local, ונקודות קצה של מטא-נתוני ענן חסומים תמיד. רזולוציית DNS נבדקת לפני הבקשה, ומונעת התקפות DNS rebinding. זה חשוב כי אוטומציה הדפדפן היא משטח ההתקפה הגבוה ביותר בכל מערכת סוכן. דף זדוני שמנסה להפנות את הסוכן לשירות פנימי חסום לפני שהבקשה יוצאת מהמערכת.

סימון מים לפרופיל הדפדפן

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

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

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

ניהול אישורים

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

עמידות לשינויים נפוצים בפורטלים

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

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

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

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

CAPTCHA שנוסף. כאן לגישה יש מגבלות כנות. CAPTCHAs פשוטים עם תמונות עשויים להיות ניתנים לפתרון בהתאם ליכולות הראייה של ה-LLM, אבל reCAPTCHA v3 ומערכות ניתוח התנהגות דומות יכולות לחסום דפדפנים אוטומטיים. תהליך העבודה מנתב אלה לתור התערבות אנושית במקום להיכשל בשקט.

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

עיבוד אצווה על פני פורטלים מרובים

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

איך זה נראה בפועל

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

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

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