Instructor: For cloud computing to gain its
intended cost savings and efficiencies,
it relies heavily on virtualization.
Now by using virtualization
numerous logical servers can be placed
on a single physical server.
This in turn reduces the physical amount of space, power
and cooling that's required inside of our data centers.
Additionally, by using virtualization
we can achieve higher levels of availability by spinning up
additional virtual servers whenever we need them.
This ability to dynamically provision memory
and CPU resources is one of the
key benefits to cloud computing.
Now, while there are many different benefits
to cloud computing, there are still numerous
security issues that we need to consider.
Most of the same security issues
that we have with physical servers
also get carried over into the cloud environment.
Oftentimes executives think that moving to the cloud
will solve all their problems,
but this is never really the case.
When using virtualization, one or more logical servers
resides on a single physical server.
To accomplish this, we use specialized pieces of software
known as a hypervisor.
The hypervisor controls the distribution
of all the resources, such as the processor,
the memory and the hard disc availability.
Essentially, the hypervisor emulates a physical machine
so that the operating system and all
of its applications don't even realize
that they're operating inside of a virtual environment.
Now, hypervisors are divided into two categories,
Type one or bare metal hypervisors,
and type two or hosted hypervisor.
Now when comparing bare metal
versus hosted hypervisor types,
the only main difference from a security perspective
is that with hosted types we have to ensure
the underlying operating system
is also properly secured and patched.
From a performance consideration,
bare metal is going to be faster and more efficient
than it's hosted counterpart.
Another virtualization option we have is known as
container based virtualization, or containerization.
With this type, a hypervisor isn't utilized at all,
instead, each container relies on a common operating system
as the base for each of those containers,
while each container shares the same
underlying operating system,
each container can have its own binaries,
libraries and applications
that can be customized for their needs.
Currently, container based virtualization
is almost exclusively used with Linux
as the underlying operating system.
Container based virtualization also uses less resources
than a type one or type two virtualization,
because it doesn't require its own copy
of the operating system for each individual container.
Many cloud service providers have taken virtualization
a step further with hyperconverged infrastructure.
This allows the provider to fully integrate
the storage, networks and servers,
without having to perform hardware changes.
Instead, they rely on software
and virtualization technology
to perform all the integrations.
We can manage all of this from a single interface
or a device without having to worry about
all the underlying vendor solutions.
Application virtualization is another type
of virtualization that's commonly used
to create additional security for our underlying host.
Application virtualization is a software technology
that encapsulates computer programs
from the underlying operating system
on which they're being executed.
A fully virtualized application
is not even installed in a traditional sense,
although it's still executed as if it was.
With application virtualization,
you can run legacy applications that were designed
for an end of life operating system like Windows XP,
or Windows 7 on top of a more modern operating system,
or you can even run cross platform software,
such as Android applications on a Windows machine.
Many cloud providers also offer VDI,
or virtual Desktop Infrastructure.
Now VDI allows a cloud provider to offer a full
desktop operating system to your end users
from a centralized server.
There's a lot of security benefits to using this approach.
For one example, I had an organization
that I worked with that created a new virtual desktop image
for each user when they logged on in the morning.
This desktop was non persistent,
so even if it was exploited by an attacker,
it was destroyed as soon as the user logged off,
or at midnight each day,
this effectively destroyed the attacker's ability
to remain persistent on that end user's desktop,
even if malware was installed.
Another great use of virtualization is to create a sandbox.
Now, a sandbox allows you to create
an isolated environment where you can analyze viruses,
worms, Trojans and other pieces of malware
within a guest operating system.
Now, because it's in this virtual sandbox
which is located inside an isolated virtual machine,
you can ensure that you can't infect your own computer
that's hosting it as the underlying host operating system,
or the underlying hypervisor.
When you work as a cybersecurity analyst
you will use sandboxes a lot to do malware analysis,
especially when you're doing dynamic malware analysis
where you'll take a piece of malware, you'll run it
and then identify what is happening when that malware runs
on that particular guest operating system.
Another good use of virtual machines
is for cross-platform virtualization.
For example, I use a MacBook Pro as my primary machine.
So if I wanted to test some software applications
for different operating systems,
I could either go and grab new machines
for each of those operating systems,
such as having one laptop for Windows,
one laptop for Linux, one laptop for Mac.
But if I use virtualization,
I can instead do cross platform virtualization
by using a hosted system on my MacBook Pro
with a piece of software like VMware,
Parallels or VirtualBox to be able to install
those guest operating systems
on top of my existing Mac OS environment.
This will allow me to then test
all the pieces of software regardless
of what operating system they need,
and see how they're going to interact.
This is great especially for web developers,
because I want to make sure as a web developer
when I create my website, that it works on Windows 10,
Windows 11, Mac, a Chromebook, an iPhone,
an Android device, or anything else,
and being able to test all of that
within a single machine by using virtualization
is a great resource for us as developers.
Another great use for virtualization is training.
You can create lab environments that are set up
so that people can go and practice
on a live operating system using these virtual machines.
For example, when you're studying
for your various CompTIA certifications,
if you buy your course diontraining.com,
they come with built-in hands-on labs.
These labs allow you to log into our cloud-based environment
and then be able to perform actions on Linux systems,
Windows 10 systems, Windows Server systems,
and other things in a safe and secure manner,
and this won't impact our production environment
because it's all isolated into this training area,
or this training sandbox.
Another great thing about using virtual machines
for a training or lab environment,
is that you can take snapshots at various points
and then pick up again right where you had that snapshot.
So for example, when I used to teach my courses in person,
I would actually create broken machines of Windows 7
and I would have different problems
for my A+ students to then troubleshoot.
I would give them the virtual machine, I would turn it on,
I would restore from the last safe point,
which was where I broke it,
and then I'd have them try to figure out
what was wrong with it and how they could fix it.
This is a great use of using virtual machines
inside your training.
And as you continue in your studies and you start learning
about Linux, and Windows, and server environments,
and Mac OS and other things like that,
you can spin up different virtual machines
that contain those guest operating systems
and practice your skills in a safe and secure environment.
The last thing we need to discuss
is the concept of emulation
because many people confuse emulation with virtualization.
Now emulation involves using a system
that imitates another system.
With virtualization, a virtual instance
of a particular piece of hardware is being created and used.
So in reality, you're using a new physical machine
that's represented by software.
With an emulator though, a piece of software
is translating the environment in real time
to pretend that it is something else.
For example, if I wanted to play an old
Super Nintendo game on my MacBook Pro,
I could download a Super Nintendo emulator like OpenEmu,
and then it's going to translate the games code
in real time to instructions that my Mac can understand.
With virtualization, the software being run
can physically access the hardware of your machine,
making it much, much faster than using an emulator.
So when might you want to use an emulator
instead of virtualization?
Well, if you need to run an operating system
that's meant for some other type of hardware,
such as a Super Nintendo on a Mac or Windows machine,
then you're going to have to use an emulator.
If you want to run software that's meant
for a different operating system, like an Android
that's designed to run on an ARM processor,
but you have an Intel processor
and a Windows operating system,
then again, emulators are going to be the right choice for you
because you're dealing with different underlying hardware.
On the other hand, if you need high speed
and better performance,
you want to use a virtualization solution.
Remember though, with virtualization,
you are limited to running software that is coded
for the particular underlying hardware of your processor.
Normally, most of us are using x86 or x64 based processors,
so you're running Windows, Linux, or Mac,
or any of those three operating systems on these type
of systems with virtualization will work just fine.
But if you're trying to run an operating system
designed for an ARM processor,
it's not going to work with virtualization,
you'd have to use an emulator.
Now in general, you're going to use virtualization
most of the time instead of an emulator,
because it's faster and more efficient
and most things are written to work
on an x86 or x64 processor.
But again, if you need to run something
for a different processor,
that's when you're going to have to use an emulator.