Мені часто ставили питання, пов'язані з функціонуванням мережі, поняттями SPI, LSP, NSP ... тому я вирішив створити цей розділ довідкової системи і детально розписати базову теорію і то, як шкідливі програми можуть пошкодити роботу Winsock.
Умовно схема роботи Winsock відображена на малюнку:
Winsock 2 має як би дві "дзеркальні боку" - Winsock API і Winsock SPI. Winsock API призначений для реалізації архітектури відкритих систем Windows (WOSA), що володіє стандартними API інтерфейсами між Winsock і використовують його додатками. SPI - це інтерфейс між Winsock і постачальниками служб Winsock.
Постачальники послуг SPI бувають двох типів:
• Постачальник транспорту (Transport Service Provider, TSP). TSP - це служби, що надають функції встановлення зв'язку, передачі даних, управління потоком, обробки помилок і т.п. Постачальники транспортної служби бувають двох видів - базові і багаторівневі. Базові (Base) постачальники реалізують конкретні деталі мережевого транспортного протоколу (типу TCP / IP), включаючи базові мережеві функції протоколу, такі як відправка та отримання даних через мережу. Багаторівневі (Layered) постачальники реалізують тільки високорівневі функції зв'язку потребують базовому постачальника для фактичного обміну по мережі;
Як видно з малюнка, постачальників NSP і TSP може бути кілька (якщо точніше - то практично необмежено багато). Ще більш цікавим є те, що список використовуваних LSP і TSP зберігається в спеціальній базі даних (яка розміщена в реєстрі). Більш того, в Winsock API є функції, які дозволяють програмі не тільки отримувати списки LSP і TSP, але і реєструвати своїх постачальників.
З точки зору фізичної реалізації провайдер SPI є звичайною DLL, розробленої за певним стандартом - зокрема, ця DLL зобов'язана експортувати ряд функцій для взаємодії з Winsock.
Можливість установки шкідливої як SPI провайдера - це ще тільки половина проблеми. Виявляється, що у Winsock є дуже неприємна особливість - будь-яке пошкодження бази даних в реєстрі з описом постачальників SPI призводить до збоїв в роботі Winsock (конкретний вид збоїв залежить від характеру пошкодження, проте всі помилки для користувача зазвичай зводяться до двох - комп'ютер перестає "бачити Інтернет "і виникають проблеми при роботі з локальною мережею - якщо проаналізувати наведену на початку цього розділу схему, то такі помилки зрозумілі і закономірні). Причин пошкодження налаштувань SPI може бути дуже багато, найбільш характерні:
• Видалення DLL, що є провайдером SPI без скасування її реєстрації в базі провайдерів SPI (DLL може бути видалена вручну, антивірусним сканером, анти-шпигунською програмою, штатним дєїнсталлятором - спосіб видалення не важливий);
• Пошкодження бази в реєстрі в ході інсталяції / деінсталяції SPI провайдерів, або в результаті ручної "чистки" реєстру.
При виявленні помилки Winsock зокрема в вся система Windows в цілому не приймають ніяких заходів по її ліквідації і не видають ніяких діагностичних повідомлень. Важливо відзначити, що перевстановлення системи "поверх" наявної не приводить до поліпшення настройки SPI.
Як видно з наведеного мною опису, термін LSP зустрівся пару раз - я взагалі загострив на ньому увагу через утиліти LSP Fix і мандрівного за описами троянських і SpyWare програм терміна "LSP" - його застосування у багатьох випадку не зовсім коректно. Причому тенденції "виправлення" термінології поступово з'являються - в останніх описах вірусів вони починають давати більш коректні і конкретні терміни типу "... Registers a Windows sockets SPI hook in the LSP chain named ...". Тому "лікувати" і відновлювати необхідно саме налаштування SPI, а не LSP ...