Categories
Technical

Windows Subsystem For Linux

الطريقة التليقيدية لأي حد كان بيحب يشغل اي Linux Binary او اي شيء لو علاقة بعالم Linux و هو شغال على Windows بصورة أساسية كانت انه يشتغل على Virtual Machine و جوة ال Virtual Machine دي كان بيشتغل على توزيعته المفضلة.

لحد النهردة ناس كتير بتشتغل بالطريقة دي (و انا لحد فترة قصيرة كنت بعمل نفس الموضوع)، لحد سنة ٢٠١٦ Microsoft أعلنت عن ما يسمى بنظام ويندوز الجزئي للينكس Windows Subsystem For Linux او ما يسمى بالـ WSL.

الهدف منه باختصار تمكين نظام تشغيل ال Windows من فهم و ترجمة و تشغيل اي Linux based Binaries.

في ٢٠١٦ كان اول اصدار من WSL، دي صورة لـ Ubuntu Bash بيشتغل من Windows Machine من غير اي Virtualization

Windows Subsystem for Linux: Here's where it's going next ...

مع اول اصدار من WSL كنت تقدر تعمل حاجات كتيرة تقدر تعملها من Windows كأنك شغال مع Virtual Machine من غير ما تلاحظ اي فرق.

Architecture

Windows Subsystem For Linux – Vegibit

  • في الاول فيه الLinux Distros و دي ممكن تنزلها من ال Windows Store زي اي Store App.
  • و انت شغال مثلًا على Ubuntu WSL، و Ubuntu هتحتاج انها تعمل اي System Operation زي، Memory Management او IO.
  • ال System Calls هتعدي على Translation Layer، ال Layer ده هيترجم ال System Calls للمقابل ليها من ال Windows System Call.
  • بعد كده ال Call دي هتروح لل NT Kernel.
  • لما الNT Kernel تبعت ال Response بتاعها هيتم ترجمته للمقابل ليها لل Linux Kernel.

Limitations

التحدي لMicrosoft كان ان كل System Call بتحصل لازم يتم ترجمتها لما يقابلها لل Linux.

المشكلة ان في بعض الأحيان Windows و Linux بينهم اختلافات جذرية.

مثال:

في الصورة موضح عملية بسيطة و الاختلاف بين ال Windows و ال Linux في طريقة التعامل مع هذه العملية.

لما بنيجي نعمل Rename ل Folder ف Windows و ال Folder ده جواه ملف مفتوح، نظام تشغيل Windows بيرفض العملية دي تمامًا و لكن في Linux العملية بتكون مقبولة بصورة عادية.

طبعًا كان فيه مشاكل تانية كتيرة، مش هنقدر نحصرها ولا نعدها، دي صورة من ال Github Issues اللي كانت موجودة، و مكنتش Microsoft قادرة تحلها بسبب الاختلافات الجذرية اللي اتكلمنا عليها، و بسبب برضه انهم مش قادرين يدعموا System Calls معينة.

كان فيه مشاكل أخرى زي بطئ ملحوظ في عمليات الIO و مشاكل مع Docker.

WSL 2

في النسخة التانية من WSL حصل تغيير جذري، مبقاش فيه Translation Layer زي ف WSL1 ، و لكن الفرق كان ان Microsoft عملت Linux Kernel خاصة بيها، و خلت ال Kernel دي تشتغل بداخل Lightweight Virtual Machine.

WSL 2 Architecture and Lifecycle

  1. ال Entry Point هي ال wsl.exe، بيتم استخدامه عشان نشوف ايه التوزيعات اللي متنصبة و ايه اللي شغال منها، و ممكن ننهي او نشغل اي توزيعة منهم من خلاله.
  2. Lxss Manager Service هي المسؤولة عن التعامل المباشر مع ال WSL.
  3. Host Compute Service هي المسؤولة عن انشاء ال Lightweight VM.
  4. بعد انشاء ال VM تقوم WSL بعمل Mapping لـ الLinux Distro File System في الحالة دي ممكن يكون Ext4 File System.
  5. بعدها بيتم تشغيل Init Process الل بدورها هتبدأ bash shell.
  6. بيتم عمل delegation للـ stdin/stdout calls من ال VM الى Windows و العكس من خلال vSockets او HPSockets.

WSL Interactions with Windows Files

بعد ما ال WSL Distro Bash Shell هتشتغل هنلاحظ اننا واقفين على /mnt/C و دي network mapping للـ Windows C Partition.

ده من خلال ال 9P Protocol و هو File Server موجود على Windows لتمكين عمليات ال IO من ال WSL مع الملفات الموجودة على Windows.

فيه برضه File Server موجود على Distro عشان يمكننا من التعامل مع ملفات نظام تشغيل ال Linux.

 

Shared Enviroment Variable $WSLENV

واحدة من المزايا القوية من وجهة نظري هي وجود Enviroment Variable مشترك بين ال WSL VM و ال Windows Host.

ده بيمكننا من تشغيل اي Windows Executable من داخل ال bash shell.

مثال: ممكن و انت بداخل ال bash shell تكتب code . وهيتم تشغيل VS Code من ال Windows Host و هيكون بصورة اوتامتيك على ال Remote Debugging Mode و ده هيمكنك بسهولة انك تكتب و تـ debug الكود بتاعك من خلال VS Code على الويندوز و الكود نفسه بداخل ال Linux Distro.

Categories
Technical

How To TOR

In this video I’m talking about

  • How Tor Works
  • Build your first .onion Hidden Service.
  • Secure your service.
  • Test Service Configurations

:Resources

:Hidden Service Documentation

https://www.torproject.org/docs/onion-services.html.en

:Hidden Service Descriptors

https://stem.torproject.org/api/descriptor/hidden_service_descriptor.html?fbclid=IwAR27V5RUNkuskv-ZRkyeMwYIyRrugg1zFuuObegG15xYh6Ked3ywHlaKCfE

:How Tor Connects to hidden service

https://tor.stackexchange.com/questions/672/how-do-onion-addresses-exactly-work/674?fbclid=IwAR17wtJZIlAswE94Izmi0f6uk40K7Glwq69AfGiWWR50zvCQp2tjtgjDcQM#674

:Best practices

https://riseup.net/en/security/network-security/tor/onionservices-best-practices?fbclid=IwAR3YJlchLmxW9hCbGJp_ICY2bahXFz-Wr0FBz6AvOoflK-0pPeVmzzqijxE

:Scanner

https://onionscan.org/

Categories
Technical

Meta Programming with Roslyn

Meta Programming with Roslyn

a video in Arabic explaining the #.Net Compiler Platform SDK aka. #Roslyn and how to use it to analyze and refactor code.

Categories
Technical

How to design your bot to handle commands commands like cancel and help

How to design your bot to handle commands commands like cancel and help

The Sample’s Repo:

https://github.com/ShawkyZ/MsBotFrameworkSample

Principles of design.. BotFramework Documentation:

https://docs.microsoft.com/en-us/bot-framework/bot-service-design-navigation

Global Message Handling Sample Repo from Microsoft:

https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-GlobalMessageHandlers

Categories
Technical

ASP.Net Web Application Security

في التدوينة دي هتكلم بصورة عامة عن بعض الخطوات اللي ممكن تعملها عشان تحمي ال Web App بتاعك.

في العادي ممكن تطبقها على اي Web App بس هقترح Libraries او tools او Best Practices ممكن تستعملها لو شغال بال ASP.Net.

Cross Site Scripting

فيه طرق كتير معروفة عشان تـPrevent ال XSS بانواعها ، هتعتمد يا اما على ال Input Validation انك بتشوف هل ال User مثلًا حاول يكتب tag معينة زي script tag فتروح تمسحها، او انك تـ Html Encode ال output.

  • مبدأيًا ASP.Net بتوفرلك Input Validation لل Malicious Characters ، و ده حلو ، بس المشكلة انه بيعتمد على Black List. بمعنى فيه زي list كده ببعض ال malicious payloads اللي ممكن تسببلك مشاكل ، و ده اكيد مش هينفع معاك ، حتى لو الليست فيها 10000 payload ، ممكن حد يعديها. فالحل لو عايز تعمل Input Validation استعمل Whitelist ، يعني هتسمح بـ Inputs معينة بس و الباقي هتشيله ، ممكن تستعمل AntiXss Library ممكن تنزلها من Nuget
PM> Install-Package AntiXSS

هتلاقي ال documentation بتاعها من هنا

  • برضه AntiXss ممكن تHtml Encodeالoutput بتاعك.
  • في حالة انك مثلا عايز تعمل Html Live Editor لأي سبب كان ، أكيد ده مش هيبقى مخاطره اكتر انك تعمله ، بس لو اضطريت هتحتاج تـSanitize ال Html ده و تعتمد على Whitelist. فيه Library كنت استعملتها قبل كده بسيطة جدًا ، و فيها ال WhiteList و ممكن تعدل عليها ، و كمان مكتوبلها Unit Tests على كل ال payloads اللي مكتوبة في الXSS Cheat Sheet من OWASP ، ده اللينك بتاعها
  • استعمل ال Header X-XSS-Protection
  • Flag ال Cookies بتاعتك بـ HTTPOnly عشان في حالة لو فيه فعلًا XSS الattacker ميقدرش يوصل للـ Cookies.

Cross Site Request Forgery

  • من اول VS 12 لما تعمل ASP.Net Web Forms App في ال Master Page بيكون فيه Prevention لل CSRF ، لو شغال على project قديم ارجع للينك ده ده هيحميك لو هتستعمل ال Master Page دي و هتستعمل ال ASP.Net View States بس فرضًا لو كنت كتبت قبل كده صفحة او Web Service مثلا و بتاخد parameter بـ Get Request و معملتش اي check ، حاجة مثلا زي
GET SITE/deleteuser.aspx?id=1

يبقى اكيد اللي كان مكتوب في ال Master Page مش هيبقى ليه أي تأثير في حالتك ، فهتضطر تـimplement انت ال check بنفسك ، ممكن ترجع للـ reference ده

  • ال ASP.Net MVC بت prevent ال CSRF بانها بتحط 2 tokens واحد في ال HTML Form و التاني بيبقى الcookie و ده لحد كده كويس. بس برضه هتقابلك نفس المشكلة لو عندك مثلا Web Service و هتبعتلها Ajax Request من الClient فهتحتاج الtokens دي تضيفها لل Request بتاعتك ممكن تشوف اللينك ده

ClickJacking

قبل ما تفكر في الحل اسال نفسك ، اي هي الصفحات اللي هتتاخد كـ iframe ؟ هل كلها هتستعمل كـ iframe ؟ طب هتستعمل برة ال domain بتاعي ؟ عامة كده كده لازم الصفحات اللي ليها علاقة ال settings بتاعت ال user مثلا او بيحصل فيها اي عمليات حساسة ، لازم تخليها متسمحش انها تتاخد كـ iframe برة ال domain بتاعك. عشان ت Prevent ال Click Jacking هتضيف ال x-frame-options header و هتـ set ال attribute يا اما

  • Deny
  • ALLOW-FROM
  • SAMEORIGIN

لو DENY هتمنع ان الصفحة تتـrender في اي iframe.

او SAMEORIGIN و هتتrender بس في حالة ان ال parent هيكون من نفس ال domain

او ALLOW-FROM و بتحدد انت ال top level browing context يكون من domain معين ،

تفاصيل اكتر هتلاقيها هنا

Unrestricted File Upload

اكيد مش هينفع تسمح للـ user انه يـ Upload اي file عندك ، فلازم يكون عندك Whitelist بانواع ال files اللي هتسمح بيها بس. مثلا انت هتسمح بـ : txt, doc, pdf فممكن تعمل 2 Checks

  • الاول تشوف ال File Type اللي جاي و لو مش موجود في ال Whitelist بتاعتك متقبلوش.
  • التاني هتشوف ال File Signature ، كل File Type بيكون ليه FIle Signature معينة بتكون في اول 20 byte منه ممكن تشوفهم من هنا فبرضه هتعمل Whitelist بال File Signatures اللي هتقبلها و تcheck لو كان ال File اللي جاي ده ال signature بتاعته موجودة في ال Whitelist ولا لأ بانك هتقرا اول 20 byte من ال File ، ده عشان مثلًا لو ال user غير ال extension بتاع ال exe file لـ txt مثلا ، في العادي دي مش مشكلة طلاما هو مش executable و محدش هيعمله execute، بس فرضًا لو كان فيه اي flow عندك تخليه يغير اسم ال file مثلا فساعتها ممكن تبقى مشكلة. عامة “Better Safe Than Sorry”.

SQL Injections

  • اسهل طريقة عشان تـ prevent ال SQL Injection انك تستعمل Parameterized Queries ، يعني لو انت شغال بال ADO.Net مثلًا و هتستعمل SqlCommand Class و ضيف ال Parameters بتاعتك من ال SqlCommand Object ، زي مثلا command.Pramaters.Add(..) بدل ما تكتب ال query بتاعك و concat بالparameters على طول.
  • و لو بتستعمل ORM زي NHibernate او Entity FrameWork بيكون فيهم Implemented Mechanisms عشان تـ Prevent ال Sql Injections.
  • اياك تstore ال passwords كـ Plain Text ، لازم تـ Encrypt و تـ Salt الHash اللي طلع بعد كده تـ Store

Privilege Escalation

لو عندك مثلا 2 Roles للـ Users بتوعك (Admin,User) فلازم تتأكد ان ال User العادي ميقدرش ينفذ نفس العمليات اللي يقدر ينفذها ال Admin. أسهل طريقة عشان تtest بيها الموضوع انك تحاول تـ Execute Function المفروض انها تشتغل بصلاحيات الـ Admin بس. عشان تـ Prevent الـ Privilege Escalations الحل الوحيد انك تتأكد ان كل User تحت Role ميقدرش ينفذ اي عمليات تانية برة ال roles scope بتاعته ، فلازم تعمل permission check عالFunctions اللي هتتنفذ لكل rule منهم. غير كده اكتب Unit Tests و جرب Test Cases زي مثلا انك تـ Execute Function معينة و انت معندكش الPermission.

Indirect Object Reference

عشان تـ Prevent ال IDOR لازم تتأكد من كذا حاجة:

  1. ال Ids عندي مينفعش انها تتـguess ، خلي الـ Ids بتاعتك GUID مثلًأ.
  2. اتاكد ان كل User تحت Role معينة ميقدرش يعمل اي حاجة برة ال permission set اللي انت محددها في ال Role دي.

Open Redirection

ابسط طريقة انك تـCheck لو كان ال Url اللي عايز يروحله Local Url ولا لأ ، لو لأ رجعه عال Index بتاعتك مثلًا او تخليه يـ Confirm انه هيـredirect برة ال domain بتاعك. ممكن برضه تاخد اللينك ده كـ reference

مصادر ممكن تقرأ منها:

حاجة اخيرة: لو بتستعمل اي third-party libraries دايمًا خليك up to date ، عشان ممكن مثلا لو بتستعمل JS Library معينة ، ممكن يكون هي نفسها فيها مثلًا XSS Vuln ساعتها انت برضه ممكن يبقى عندك نفس المشكلة.

 

Categories
Technical

Connecting a bot with RaspberryPi running Windows IoT Core.

في الفيديو ده بشرح ازاي تربط ال Raspberry Pi بـ Bot معمول بـ Microsoft Bot Framework عشان يبدا يفهم امر معين من ال user زي مثلا “Turn the yellow led on”.

Categories
Technical

Writing Multithreaded test to reproduce SQL Deadlocks.

في الفيديو ده بشرح ازاي تكتب Multi threaded Test نقدر من خلاله نـ reproduce ال SQL Deadlocks

 

Categories
Technical

Creating a feedback form for the Weather Bot and connecting it with Facebook and Telegram.

في الفيديو ده بشرح ازاي تبني للـ Weather Bot زي Feedback dialog، و ازاي تربطه بـ Facebook و Telegram.

Categories
Technical

Punnycode Phishing Checker

دي chrome extension بسيطة كتبتها بتعرف اذا كان ال website ده مستخدم ال Punycode phishing technique ولا لا. الفكرة اني بجيب ال Url و بجرب اعمله decode ب punycode js library. لو النتيجة اللي طلعت ف الاخر كانت غير ال URL الحالي تبقى دي ممكن تكون فعلا phishing و بتظهر رسالة ف اول الصفحة تقول ده. شكل الرسالة

 ال extension و ال source code و شرح التحميل

https://github.com/ShawkyZ/PunycodePhishingChecker

Categories
Technical

Building A Weather Bot Using LUIS and MS BotFramework

الbot المفروض في الاخر ياخد الرسالة من الuser و يبعتها لل Cognitive Services تحللها و منها يعرف لو ال user متضايق مثلا او لا و على اساس كده ممكن يرد عليه رد معين.