تفاصيل غير متوقعة لجدار حماية Windows الافتراضي. وتجارب لإعادة التشكيل

في بعض الأحيان اتضح أنه أثناء تنفيذ المشروع التالي ، اكتشفت بالصدفة بعض الظروف التي ، على ما يبدو ، لا أحد يختبئ ، يمكنك حتى العثور على وثائق تشرح الجوهر ... لكن الكثيرين ، بمن فيهم أنا ، محتجزون بسبب الأوهام ، لذلك لا يبحثون عن تلك الوثائق ، الاعتماد على صورة خاطئة تمامًا للعالم. لدي بالفعل سلسلة كاملة من المقالات المخطط لها ، والتي أبلغت فيها ببساطة أن كل شيء يتبين أنه ليس كما يعتقد الكثير (بمن فيهم أنا). كان لدي مقال حول DMA ، كان هناك مقال حول أداء ناقل PCI Express . يمكن الرجوع إلى المقالة حول تكوين ROMs لـ Altera FPGAs إلى نفس الدورة .



اليوم أود أن أخبركم ببضع كلمات عن جدار حماية Windows ، أو جدار الحماية كما يطلق عليه في نظام التشغيل سكانها ينالون الجنسية الروسية. بشكل عام ، هذا شيء جيد جدًا ، لكن بشكل خاص ... اتضح أنه يعمل بشكل افتراضي في وضع مثير للاهتمام إلى حد ما. كما يقول المثل: "والصبيان لا يعرفون". لذلك ، نبدأ في معرفة ما هو.









المقدمة



أولاً ، سأشرح جوهر المشكلة التي كنت أحلها. اضطررت إلى التحقق من كيفية عمل اللوحة التالية بشكل صحيح مع خدمة جميع الأجهزة. ولكن ليس المقال الذي راجعته في إحدى المقالات السابقة ، ولكنه أكثر تعقيدًا ، مع Xilinx FPGA.



ما هي خدمة All Hardware. هذا هو الموقع الذي يزوره المستخدم ويسجل الدخول ويتلقى قائمة باللوحات المختلفة الموجودة فعليًا على الخادم. لماذا يفعل هذا؟ للعمل مع السبورة دون شرائه. على سبيل المثال ، تعرف على ما إذا كانت تعمل معه ، أو تدرب فقط على استخدام وحدة تحكم معينة. يتم توفير اللوحات من قبل الشركات المصنعة ، وتوفر الخدمة جلسة محدودة الوقت معهم. يختار المستخدم لوحة من القائمة ويحصل على ثلاثة أشياء: عنوان IP ورقم المنفذ والفيديو من الكاميرا التي تبحث في هذا التخطيط. في الواقع ، لا يزال بإمكانك إعادة توجيه المنافذ عبر SSH ، لكنني لست خبيرًا فيها. من جهتي - بالضبط العنوان والميناء والفيديو.



علاوة على ذلك ، يجب على المستخدم في بيئة التطوير ، الموجودة على أجهزته المحلية ، تحديد مصحح أخطاء عن بُعد (بالنسبة لمعظم البيئات ، هذا هو GDB القديم الجيد ، وبالنسبة لـ Keil فهو أكثر انحرافًا ، ولكن إذا كنت مهتمًا - يمكنك عمل مقال منفصل حول هذا ، وهذا لا ينطبق على جدار الحماية). يتم تشغيل IP والمنفذ اللذين تم إصدارهما هناك ، وبعد ذلك يمكنك بدء جلسة تصحيح الأخطاء عن بُعد ، مع التركيز على ما يحدث مع اللوحة من خلال الصورة من الكاميرا والمنافذ التي يتم توجيهها عبر SSH.



وبالتالي ، يمكن لأي شخص أن يشعر بالعمل مع مجالس التطوير المختلفة دون شرائها. في الوقت نفسه ، كما في حالة Redd ، تتم استضافة بيئة التطوير ورموز المصدر على الجهاز المحلي. يذهب الكود الثنائي فقط إلى الخادم. ولكن بعد انتهاء الجلسة ، تقوم الأتمتة بمسح ذاكرة القراءة فقط ، بحيث لا يتمكن المستخدم التالي من قراءة الكود.



لذا ، عد إلى موضوع المقال. ما هو جانب جدار الحماية هنا؟ انه سهل. اضطررت للعمل مع Xilinx FPGA. وبيئة التطوير الخاصة بهم هي WebTalk رسميًا. لم أكن أريدها أن تبلغ عن أفعالي "حيث يجب أن تكون" ، لذلك كانت البيئة على جهاز غير متصل بالشبكة. حتى لو أرادت ذلك حقًا - يداها قصيرتان. لا توجد قناة مادية وهذا كل شيء! لكن مفهوم خدمة All Hardware هو أنه يجب أن تكون هناك شبكة. للتحقق ، كان يجب توصيل السيارة مؤقتًا بالسلك (في الواقع ، يعد عدم وجود شبكة عادة ، ولا يزال هناك شيء مثير للاهتمام في تلك السيارة) ماذا أفعل؟ خطوة على حلق جنون العظمة لديك؟ حسنا، انا لا! قررت قصر قائمة العناوين المسموح بها على بيئة التطوير بحيث لا تعمل إلا مع المضيف المحلي وخادم كافة الأجهزة. لا أعرف ماذا سيحدث بعد ذلكوالآن يمتلك خادم All Hardware نفس عنوان IP. إنها مجرد منافذ جديدة يتم إصدارها من جلسة إلى أخرى. لذا ، الهدف واضح ، دعنا ننتقل إلى التنفيذ.



ما هو جدار الحماية الذي يجب أن أتخذه؟



في نظامي التشغيل Windows XP و Windows 7 ، استخدمت Outpost Firewall. هذا تطور محلي. موثوقة للغاية ومريحة. حتى أنني اشتريت لنفسي رخصة مدى الحياة لثلاث سيارات من المخزون. بمجرد أن ساعدني جدار الحماية هذا في التعرف على حصان طروادة لم يره أي برنامج مكافحة فيروسات. عندما تمكنت من أخذ الملف مع جسم الفيروس ، قمت بتزويده بالعديد من برامج مكافحة الفيروسات المتوفرة على قرص حي. لا أحد لاحظ أي شيء مريب. وكان جدار الحماية الخاص بي في حالة بجنون العظمة ، حيث علمت بالنشاط المشبوه للبرنامج.



كان كل شيء على ما يرام حتى أغلقت الشركة المصنعة لجدار الحماية هذا في ظروف غريبة. بعد ذلك ، أصبحت حزينًا جدًا. كنت حزينًا جدًا لأن الكمبيوتر المحمول الرئيسي الخاص بي لا يزال يحتوي على 7 مع Outpost ، لأنني لم أبحث عن بديل. لكن Xilinx IDE يريد المراكز العشرة الأولى! تماما! لذلك ، حان الوقت لتعلم كيفية العمل مع جدار الحماية المدمج في نظام التشغيل هذا!



نعلم جميعًا أنه عندما يحاول أحد البرامج الوصول إلى الشبكة ، فإن جدار الحماية القياسي هذا يسألنا عما إذا كنا سنسمح له بالعمل مع الشبكة أم لا. يمكننا أن نحظر على الفور ، أو يمكننا إلغاء تحديد مربع الإذن بعد ذلك ، هناك الكثير من الأدلة حول هذا على الشبكة. مربعات الاختيار هذه هي:







الجميع يعرف هذا. لكن ما هي قيمة هذه المعرفة؟ سأحذف أفكاري التي غمرتني عند قراءة كتلة من نفس النوع من المقالات "كيفية منع تطبيق ما من الاتصال بالإنترنت" ، والتي لا تخبرنا كيف لا تمنعه ​​، ولكن فقط لتقييده. أفضل عرض استنتاجاتي باستخدام مثال تم إعداده خصيصًا لهذا الغرض. لنكتب اثنين من أبسط تطبيقات وحدة التحكم.



الخادم



سيتظاهر التطبيق الأول بأنه خادم. يأخذ حزم UDP التي تحتوي على سلاسل ويعرضها على الشاشة. لكي نتحدث عن نفس الشيء ، إليك كود مصدر C ++:

#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>

// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")

#define DEFAULT_BUFLEN 16

int main(int argc, char** argv)
{
	if (argc != 2)
	{
		printf("usage: ServerTest.exe port");
		return -1;
	}

	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

    // The socket address to be passed to bind
    sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = INADDR_ANY;
	addr.sin_port = htons((u_short)strtoul (argv[1],0,0));

	SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0/*IPPROTO_UDP*/);

	bind(sock, (struct sockaddr*) &addr, sizeof(addr));

	while (true)
	{
		struct sockaddr from;
		int len = sizeof(from); 
		char buf[DEFAULT_BUFLEN];
		memset(buf, 0, DEFAULT_BUFLEN);
		recvfrom(sock, buf, DEFAULT_BUFLEN-1, 0, &from, &len);
		printf(buf);
	}

	return 0;
}


نطلق هذا البرنامج ، ونمرر رقم المنفذ (على سبيل المثال ، 1234) كوسيطة ونتلقى طلبًا متوقعًا من جدار الحماية:







دعه نشاط الشبكة ... دعه ينتظر بعض الوقت ، وسنكتب جزء العميل على أنه EXE آخر.



زبون



دع عميلنا يرسل خطوط الغزل إلى الخادم. هنا نصها:

#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include "Windows.h"

// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 16

int main(int argc, char** argv)
{
	if (argc != 3)
	{
		printf("usage: ClientTest.exe address port");
		return -1;
	}

	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

	struct sockaddr_in server, client = { AF_INET,INADDR_ANY,INADDR_ANY };
	memset(&server, 0, sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port = htons((u_short)strtoul (argv[2],0,0));
	InetPton(AF_INET, argv[1], &server.sin_addr.s_addr);

	SOCKET sock = socket(PF_INET, SOCK_DGRAM, 0);
	bind(sock, (sockaddr*)& client, sizeof(client));

	for (int i=0;;i++)
	{
		static const char* sticks[] = { "\\\r","|\r","/\r","-\r" };
		sendto(sock, sticks[i%4], strlen(sticks[i%4])+1, 0, (sockaddr*)& server, sizeof(server));
		Sleep(250);
	}

}


نبدأ بتحديد عنوان الخادم والمنفذ الذي يمتلكه الخادم (لدي 192.168.1.95 و 1234) ، وبعد ذلك يبدأ تشغيل واحد مختلف قليلاً في نافذة الخادم عما أردت ، ولكن لا يزال عصا:







ولكن ما يقلقني ليس هذا الرمز لا يعيد "\ R" العربة إلى بداية السطر ، لكن حقيقة أن العميل عملية منفصلة ... يتم إطلاقها من ملف منفصل تمامًا! .. والجدار الناري لم يطلب مني الإذن بنشاط الشبكة. بدلاً من ذلك ، قام بحلها بنفسه ، حتى دون إخباري أن البرنامج سيذهب إلى مكان ما. كيف ذلك؟



القليل من النظرية حول أوضاع تشغيل جدار الحماية



هنا نأتي إلى جوهر المقال.

, Windows- , . , , - ( ), , , !


في الواقع ، هذا هو إعداد جدار الحماية المقابل:







كل ما هو غير محظور مسموح به. يمكن رفض نشاط التطبيق بشكل صريح. هذا ما تم تخصيصه لعدد كبير من المقالات على الإنترنت ... لكن حصان طروادة سيصعد على سيارتنا بشكل غير محسوس ، ولن نخمن حتى ما يجب إدخاله بالضبط في التطبيقات المحظورة. مرة أخرى ، هذا لا يحل مشكلتي المقدمة في مقدمة المقال. أحتاج إلى ترك حق الوصول إلى تلك العناوين التي سمحت بها وأرفض جميع الآخرين.



للقيام بذلك ، تحتاج إلى تبديل جدار الحماية إلى وضع "كل شيء ممنوع غير مسموح به" للاتصالات الصادرة. أنا دائمًا في حيرة من أمري كيفية إدخال عنصر القائمة المقابل ... نعم ، لقد وجدته ...







وهناك نختار أولاً علامة التبويب المقابلة للملف الشخصي النشط (في صورتي كانت "ملف تعريف عام" ، ثم نبدل قائمة تحديد "الاتصالات الصادرة" من "السماح (افتراضي)" إلى "حظر".







هذا كل شيء ، هل يمكننا النوم جيدًا؟ ، لا. إذا كان الأمر بهذه البساطة ، فأنا متأكد من أن Microsoft ستختار على الفور وضع "الحظر" للجميع. إنه لأمر مؤسف ، لكن كل شيء بدأ للتو.



قليلا عن الماسوشية التطبيقية



وبالتالي. لنفترض أنك قمت بتشغيل وضع المنع للخارج ... مات كل شيء في الحال ، بما في ذلك المتصفحات. بشكل عام ، لا أحد يهتم في أي وقت بإعادة الخيار إلى الموضع القديم والعودة إلى الإصدار الأصلي. لكن دعونا نرى ما يقدمه لنا النظام الجديد بشكل عام. نحصل على قائمة القواعد. وبالنسبة لهذه القواعد ، يمكنك تعيين شرط إذن غير مشروط ، أو يمكنك تعيين قائمة بالمنافذ المفتوحة وقائمة بالعناوين المفتوحة للتطبيق. يمكن تعيين العناوين كمجموعة. ها هي نافذة إعدادات المنفذ:







ها هي نافذة إعدادات العنوان:











علاوة على ذلك ، لا أحد يكلف نفسه عناء فتح المنفذ لأي برامج ، مما يحد من قائمة العناوين الصالحة لذلك. أي أننا لا نقول "برنامج كذا وكذا للسماح بالوصول إلى المنافذ كذا وكذا" ، ولكن "جميع البرامج التي تعمل عبر المنفذ كذا وكذا ، تسمح بالعمل ، وتقتصر العناوين على المجموعة التالية".



كل شيء رائع باستثناء شيء واحد. إذا تم إنشاء قائمة قواعد الاتصالات الواردة بواسطة النظام ، فبالنسبة للاتصالات الصادرة ، تحتاج إلى إضافة كل شيء بنفسك. كما قلت ، توقف المتصفح - اضطررت إلى إضافته إلى صناديق الصادر المسموح بها بنفسي. لن أصف كيفية تكوين العناوين ، هذه ليست المقالة. المقالات حول وضع القواعد (لغرض الحجب) هي عشرة سنتات. بشكل عام ، عادةً ما أجد قاعدة مناسبة للوارد ، وقم بنسخ اسم الملف من هناك ، ثم - إنشاء قاعدة للخارج ، تشير إلى نفس الملف. حسنًا ، وسمحت لهذا البرنامج أن يكون نشطًا.



عندما واجهت مشكلة في الاتصال بشبكة VPN في المكتب ، بحثت في قائمة القواعد الجاهزة ووجدت هذا (كنت أعرف مسبقًا أن اتصال VPN الخاص بنا قد تم باستخدام بروتوكول L2TP):







تم إنشاء القاعدة لنا ، ولكن لم يتم تفعيلها. ذهبت إلى خصائصها ، وقمت بتنشيطها ، وبعد ذلك ظهرت كرة خضراء عليها علامة اختيار على اليسار في القائمة ، وعمل اتصال VPN بالمكتب.



لكن بطريقة أو بأخرى ، ولكن بشكل عام ، فإن العمل مع مثل هذا الجدار الناري يشبه ماسوشية. تحتاج إلى إرادة حديدية حتى لا تصرخ: "وكل هذا متعب" ولا تعود إلى نمط العمل القديم. لقد وصلت إلى هذه الحالة تقريبًا (لحسن الحظ ، تم بالفعل الانتهاء من التجارب مع Xilinx لجميع الأجهزة) ، لكن أحد معارفي اقترح لي حلاً جميلًا.



إضافة على جدار الحماية القياسي



اتضح أن هناك برنامج مجاني رسميًا للتحكم في جدار حماية Windows.







إنه لا يفعل شيئًا من تلقاء نفسه ، فهو يدير جدار الحماية المدمج في Windows ، مما يوفر واجهات سهلة الاستخدام للغاية. الآن ليس عليك المرور عبر مجموعة من القوائم لتخصيص شيء ما. يتم جمع جميع الإعدادات بشكل ملائم ومضغوط في عدة علامات تبويب. لن أصف جميع وظائف هذا البرنامج. الغرض من المقال ليس وصفه ، ولكن ببساطة تحديد وجوده. علاوة على ذلك - يمكن للجميع العثور على مقالات متخصصة ، مع معرفة اسم التحكم في جدار حماية Windows.



والآن ، عند بدء تشغيل جزء العميل من المثال أعلاه ، تلقيت أخيرًا رسالة:







يمكنني منحه حق الوصول ، وبعد ذلك سيتم إنشاء قاعدة تلقائيًا ، ويمكنني رفض الوصول ، ويمكنني حظر التطبيق مرة واحدة.



من أجل الاهتمام ، وجدت قاعدة تم إنشاؤها تلقائيًا في قائمة جدار الحماية القياسية وقيدت قائمة العناوين المتاحة لها:







بشكل عام ، مع هذا التطبيق أصبح أسهل بكثير حتى عند استخدام جدار حماية Windows القياسي. أفضل بكثير أن جهاز Windows 10 هذا ظل متصلاً بالإنترنت ، وليس بلا حماية كما كان من قبل.



خاتمة



يعمل جدار حماية Windows القياسي افتراضيًا في مثل هذا الوضع بحيث يمكن لأي برنامج بدء إرسال البيانات ، والتي لن يتم إبلاغ المستخدم بها. لا أحد يخفيه ، لكن لا يعرفه الجميع. يمكنك بالطبع تثبيت جدار حماية تابع لجهة خارجية ، ولكن يكفي تمامًا تبديل جدار حماية Windows القياسي إلى وضع "كل شيء ممنوع غير مسموح به". لسوء الحظ ، اتضح أنه من الجحيم دعم أداء الشبكة بالوسائل العادية. لكن برنامج Windows Firewall Control المجاني التابع لجهة خارجية يزيل هذا الإزعاج.



سواء كنت ستستخدم حزمة من جدار الحماية العادي وهذا البرنامج ، أو ستحصل على جدار حماية تابع لجهة خارجية ، فإن السؤال مفتوح. لكن حقيقة أن استخدام جدار الحماية القياسي في الوضع الافتراضي أمر مخيف إلى حد ما ، في رأيي ، أمر لا شك فيه.



All Articles