Atlant Security - WordPress плъгин за цялостна защита

Blinky

Owner
Днес попаднах на един много добър плъгин, писан от българи:


Става дума за Atlant Security, който е цялостен плъгин за сигурност на WordPress, който осигурява защита от корпоративен клас чрез 17 интегрирани модула за сигурност, организирани в архитектура за защита на пет нива.

Има фри версия: https://wordpress.org/plugins/atlant-security/

Както и ентърпрайс лиценз.

Скоро мисля да го пробвам и да дам повече информация как работи в реална среда. Ако някой го е ползвал, нека сподели.
 
От кодекс-а

Прегледах кода на Atlant Security 1.1.25. Изводът ми: не изглежда като зловреден плъгин и има доста добре обмислени защити, но не бих го сложил директно на production сайт без staging тест. Има няколко реални архитектурни риска.


Най-важните проблеми​


1. Риск от загуба на данни при миграция — висок​


При миграцията от старите fwwp_* таблици към aswp_*:


  • данните се копират само ако новата таблица е напълно празна;
  • след това старата таблица се изтрива независимо дали съдържа допълнителни записи.

Ако старата и новата таблица имат данни, старите записи могат да бъдат загубени. Същият подход при конфликтни настройки предпочита вече съществуващата нова стойност, която може да е default, пред реалната стара конфигурация.


Това трябва да се преработи с INSERT IGNORE, миграция по първични/уникални ключове и изтриване само след проверка на резултата.


2. Събира прекалено чувствителни данни — висок​


Visitor logger записва:


  • пълния URL, включително query string;
  • IP адрес;
  • referrer;
  • user agent;
  • потребителско име;
  • история до 30 дни по подразбиране.

Така в базата могат да попаднат:


  • reset tokens;
  • tracking и authentication параметри;
  • имейли, ЕГН или други данни от URL;
  • чувствителни REST параметри.

Outbound monitor също пази пълни външни URL адреси. Ако API ключ се предава в query string, той ще бъде записан в лога.


Трябва да има централизирано премахване на чувствителни параметри като token, key, secret, code, nonce, password, signature и възможност query string изобщо да не се пази.


3. Значително натоварване на базата — среден към висок​


При почти всяко посещение плъгинът:


  • проверява настройки;
  • проверява whitelist/blocklist;
  • анализира user agent;
  • евентуално прави GeoIP lookup;
  • записва ред в aswp_visitor_log;
  • после прави допълнителен UPDATE за title/post/status.

На сайт с реален трафик това практически означава поне 1–2 допълнителни SQL операции на request. При твоя случай с oversold shared hosting, Redis timeout-и и ограничени DB connections бих бил особено предпазлив.


4. Rate limiting не е атомарен — среден​


REST limiter използва APCu масив или WordPress transient чрез:


  1. прочитане;
  2. добавяне;
  3. записване.

При няколко едновременни заявки част от обновяванията могат да се загубят. Това позволява реалният лимит да бъде надвишен. За security limiter е по-добре атомарно Redis increment, object-cache lock или SQL операция с уникален bucket.


5. Неточно логване на HTTP статусите — среден​


Request logger се стартира още на init. В този момент повечето заявки изглеждат като HTTP 200. Има специална корекция за 404, но не виждам общо финално обновяване за:


  • 301/302;
  • 401/403;
  • 429;
  • 500 и други грешки.

Следователно статистиката може да показва 200 за заявки, които реално са приключили с друг статус.


6. Security плъгинът има огромна зона на влияние​


Той контролира едновременно:


  • login URL;
  • WAF;
  • IP blocking;
  • REST API;
  • XML-RPC;
  • 2FA;
  • сесии;
  • security headers;
  • cron;
  • файлове и quarantine;
  • външни HTTP заявки.

Това не е директна уязвимост, но един regression може да счупи WooCommerce, Gutenberg, cron, webhooks, update проверки или външни API интеграции. Има safe mode чрез:



define('ASWP_SAFE_MODE', true);


Това е добро решение, но изисква достъп до wp-config.php.


Какво е направено добре​


Кодът е осезаемо по-добър от типичен случаен WordPress security плъгин:


  • AJAX методите обикновено проверяват nonce и capability.
  • Няма видими backdoors, eval, shell изпълнение или прикрито изпращане към съмнителен сървър.
  • 2FA flow има отделен HMAC challenge, ограничение на опитите, cooldown и bcrypt за email/recovery кодовете.
  • Проверява се path traversal преди download/quarantine.
  • Quarantine файловете губят изпълнимото си разширение.
  • Има защита срещу SSRF, IPv6 и DNS rebinding при външни заявки.
  • Cloudflare IP headers не се приемат сляпо.
  • WAF първоначално работи в log mode.
  • Има аварийна процедура срещу заключване на администратора.
  • SQL заявките с входни стойности в повечето случаи използват $wpdb->prepare().

Допълнителни забележки​


  • TOTP secret се пази в чист вид в usermeta. Това е обичайно, защото е необходим за проверката, но при изтичане на базата 2FA защитата пада. Може да се криптира със server-side ключ.
  • Scanner-ът е основно regex-based. Ще има false positives и не трябва автоматично да се приема за еквивалент на професионален malware scanner.
  • REST rate limiting чрез transients може сериозно да пълни wp_options, ако няма persistent object cache.
  • Плъгинът записва голямо количество информация, което изисква поне актуализирана privacy policy и разумна retention настройка.
  • Не успях да пусна автоматичен php -l, защото PHP CLI липсва в средата; анализът е статичен преглед на кода.

Оценка​


ОбластОценка
Видима злонамереностНе открих
Организация на кода7/10
Защитно програмиране8/10
Производителност5/10
Privacy/GDPR4/10
Безопасност при обновяване4/10
Подходящ за директен production installНе

Моята практична присъда: изглежда сериозно разработен, но е прекалено агресивен и комплексен. Бих го тествал на копие на сайта, бих изключил visitor logging или поне query strings, и задължително бих поправил миграцията преди доверено production използване.
 

Горе