Inside ZCode: در حال آپلود بی سر و صدا تاریخچه Git خود در فضای ابری
آدرس مقاله: https://blog.ferstar.org/en/posts/zcode-silent-workspace-snapshot-upload/ آدرس نظرات: https://news.ycombinator.com/item?id=49750694 امتیاز: 261 # نظر: 93
من انگلیسی زبان مادری نیستم. این مقاله توسط هوش مصنوعی ترجمه شده است.
این کار با یک بررسی روتین و در حین آزاد کردن فضای دیسک شروع شد: ~/.zcode بیش از 700 مگابایت را اشغال می کرد. پس از حفاری متناوب در آن، چیزی بسیار عجیب را تأیید کردم:
هر زمان که وارد سیستم شوید، ZCode (برنامه دسکتاپ کدنویسی AI رسمی Zhipu) بیصدا کل فضای کاری شما را بستهبندی میکند - تاریخچه کامل git.، حافظه پنهان دارایی LFS، reflogs و تنظیمات برنامه جهانی - آن را رمزگذاری میکند و مستقیما در Aliyun OSS آپلود میکند.
حتی طعنه آمیزتر: کلید عمومی RSA که برای رمزگذاری استفاده می شود، در لحظه توسط سرور تحویل داده می شود، در حالی که کلید خصوصی منحصرا در فضای ابری زندگی می کند. شما نمی توانید آن متن رمز چند صد مگابایتی را که دقیقا روی دیسک خود قرار دارد رمزگشایی کنید، و همچنین خود مشتری ZCode نیز نمی تواند.
در اینجا سوابق کامل تحقیقات، زنجیره شواهد و دفاع یک خطی است که برای همیشه آن را تعطیل می کند.
~/.zcode ریشه داده ZCode است. تفکیک اندازه تقریبا به این صورت بود:
در داخل v2/checkpoints/، یک فایل .enc با حجم 313 مگابایت در کنار یک فایل فراداده وضعیت پیدا کردم:
مخزن در مجموع 10 گیگابایت بود. منهای وابستگی ها، 345 مگابایت باقی مانده تقریبا به طور کامل مالکیت معنوی اصلی بود.
گزارشها حاوی نشانیهای اینترنتی آپلود صریح نبودند، بنابراین من app.asar کلاینت را باز کردم. جریان آپلود بازسازی شده:
بررسی سوکتهای فعال این موضوع را تأیید کرد: فرآیند در حال اجرا ZCode اتصالات HTTPS دائمی به نقاط پایانی IP zcode.z.ai بهعلاوه دو گره ذخیرهسازی Aliyun OSS را حفظ کرد.
اجرای رمزگذاری از رمزگذاری پاکت کتاب درسی استفاده می کند:
نکته مهم کلید عمومی است: این کلید در طول مذاکره اعتبارنامه توسط سرور تحویل داده می شود و کلید خصوصی مربوطه هرگز به دستگاه شما برخورد نمی کند. همانطور که انتظار می رفت، باز کردن کلید پاکت با همه کلیدهای خصوصی محلی روی سیستم من انجام نشد.
به عبارت دیگر: متن رمزی 313 مگابایتی در درایو شما توسط شما یا مشتری قابل باز شدن نیست. فقط باطن Zhipu کلید را برای باز کردن قفل نگه میدارد.
اگر این ویژگی واقعا برای عقبگرد یا همگام سازی بین دستگاهی ساخته شده بود، کلیدها به صورت محلی (درست مانند Git یا Time Machine) فعال می شدند. کلیدی که فقط سرور می تواند از آن استفاده کند دقیقا یک هدف را دنبال می کند: اطمینان از اینکه سرور می تواند هر زمان که بخواهد کد شما را بخواند.
حتی اگر متن رمز قفل شده است، Manifest (موجودی فایل) تولید شده در طول بسته بندی به صورت محلی در متن ساده ذخیره می شود. تجزیه یک عکس فوری از 42411 فایل:
دایرکتوری .git به تنهایی 86.6 درصد از بار را تشکیل می دهد.
پس از آپلود، ابر بسیار بیشتر از درخت کاری فعلی شما دریافت می کند - کل اصل و نسب مخزن شما را از روز اول دریافت می کند:
علاوه بر این، یک مانیفست اضافی به نام repo_snapshot_extra_manifest فایلهای پیکربندی جهانی ZCode شما (مانند settings.behavior.json) را هش میکند و با هر عکس فوری آنها را در فضای کاری دستهبندی میکند.
واکنش طبیعی در حال بررسی تنظیمات برای خاموش کردن آن است. من به گزینه های UI با پایگاه کد ارجاع دادم:
نگاه کردن به کد اسمبلی میزبان این موضوع را کاملا واضح میکند: دوربین کناری ضبط/آپلود بدون قید و شرط در هنگام راهاندازی نمونهسازی میشود. در صورت بررسی تنظیمات برگزیده کاربر، هیچ دروازه ای وجود ندارد. تنها شرط این است که tokenProvider بتواند یک JWT معتبر برگرداند.
خط پایین: تا زمانی که وارد سیستم شده باشید، این خط لوله پسزمینه بهطور دائم فعال است و هیچ تنظیم رابط کاربری نمیتواند آن را خاموش کند.
راهاندازهای ضبط در دو نقطه رخ میدهند: captureBeforePrompt (قبل از هر درخواست) و در تکمیل کار با برچسب repo-wiki-update. در گزارشهای جلسه، یک جلسه فعال تا 62 رویداد ضبط ایجاد میکند.
با این حال، در کل خطمشی، پرسشهای متداول و گزارشهای تغییرات، حتی یک مورد از بستهبندی و آپلود بیصدا کل فضاهای کاری و تاریخچههای کامل Git وجود ندارد.
نزدیکترین مورد بیانیه قالب کلی است: «برنامه بهینهسازی به طور پیشفرض خاموش است و ورودیها بدون رضایت برای آموزش استفاده نمیشوند».
وقتی برای اولین بار بسته معلق را پیدا کردم، آن را به سادگی حذف کردم. در عرض نیم ساعت، دوباره ضبط شد - یک بایگانی جدید 313 مگابایتی با شمارنده مجدد از 564 به 565. وقتی آپلودکننده می بیند که فایل از بین رفته است، فقط یک فایل جدید بسته بندی می کند. حذف دستی ضربه زدن به مول است.
تمیزترین و موثرترین راه حل، تنظیم یک پرچم تغییر ناپذیری در سطح فایل سیستم، عدم دسترسی به نوشتن در سطح هسته است:
هنگام استفاده از ابزارهای هوش مصنوعی، استنتاج مدل به طور اجتناب ناپذیری به زمینه کد نیاز دارد - همه این را می پذیرند. اما این رفتار به وضوح از دو طریق از مرز عبور می کند:
اول، محدوده داده. استنتاج زمینه مربوط به کار را ارسال می کند. Snapshoting کل مخزن را همراه با سالها سابقه ارتکاب Git استخراج می کند.
دوم، وضعیت معماری. اگر این واقعا برای بازیابی یا همگام سازی در سمت کاربر طراحی شده باشد، کلیدهای رمزگشایی متعلق به کاربر خواهد بود. یک کلید رمزگذاری که منحصرا توسط سرور نگهداری میشود، عدم افشای خطمشیهای حفظ حریم خصوصی، بارگذاریهای غیرقابل توقف در پسزمینه، و بستهبندی مجدد سرسختانه پس از حذف - این کمتر شبیه پشتیبانگیری است و بسیار شبیه مجموعه است.
ابزارها ابزار هستند، اما کاربران باید مرزهای خود را ترسیم کنند. اگر نرم افزار به شما اجازه نمی دهد آن را خاموش کنید، از هسته سیستم عامل برای قفل کردن آن در قفس استفاده کنید.
متن اصلی (انگلیسی)
Inside ZCode: Silently uploading your Git history to the cloud
Article URL: https://blog.ferstar.org/en/posts/zcode-silent-workspace-snapshot-upload/ Comments URL: https://news.ycombinator.com/item?id=49750694 Points: 261 # Comments: 93