this post was submitted on 24 Oct 2023
27 points (100.0% liked)

Selfhosted

40670 readers
393 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

Hi everyone, I've been trying to understand how MiTM setups like a transparent proxy work.

Obviously, the use-case here is in a personal scope: I'd like to inspect the traffic of some of my machines. I am aware that Squid can be a transparent proxy, and some might use the Burp Suite to analyse network traffic.

Could someone explain the basic networking and the concept of certificates in this scenario? I feel like I don't understand how certificates are used well enough.


For example: I realise that if someone inserts a root certificate in the certificate store of an OS, the machine trusts said CA, thus allowing encrypted traffic from the machine to be decrypted. However, say the machine was trying to access Amazon; won't Amazon have its own certificate? I don't know how I'm confused about such a simple matter. Would really appreciate your help!

you are viewing a single comment's thread
view the rest of the comments
[–] MigratingtoLemmy@lemmy.world 3 points 1 year ago (2 children)

I see. Which would mean that in cases where the application/OS can be made to blindly trust the "fake" CA (by inserting a root certificate into the certificate store, like in Android), the proxy can simply send the certificate and the client will believe that the certificate comes from Amazon. The certificate list can be refreshed by flushing the cache, yes?

Thanks for the explanation

[–] stifle867@programming.dev 4 points 1 year ago (1 children)

There are some cases where this would not work by the way. It's called certificate pinning and it's basically when an application comes with the trusted certificate for a host built-in. Even if you were to override it with a root certificate in the certificate store, the app simply wouldn't use it.

[–] MigratingtoLemmy@lemmy.world 1 points 1 year ago (1 children)

Shouldn't flushing the cache mitigate this problem?

[–] stifle867@programming.dev 6 points 1 year ago (1 children)

No, not at all. The request never hits the cache. The certificate is stored within the app and all internet communication is specifically pinned to said certificate. It doesn't even ask your certificate store.

[–] MigratingtoLemmy@lemmy.world 1 points 1 year ago (1 children)

I see. Thanks, I'll have to rethink the idea in that case.

[–] stifle867@programming.dev 2 points 1 year ago (1 children)

Yeah, unfortunately it's a huge barrier if you're wanting to see why your devices are phoning home and the data being sent. It makes it extremely difficult if not impossible for most people to bypass.

[–] MigratingtoLemmy@lemmy.world 1 points 1 year ago (1 children)

I understand. What other methods would you suggest to be able to snoop on/decrypt the traffic from my device?

[–] stifle867@programming.dev 3 points 1 year ago* (last edited 1 year ago) (1 children)

Specifically for attempting to bypass certificate pinning you're solidly in the realm of reverse engineering. I haven't attempting it myself but I have read the efforts of others over the years and the process was quite evolved and ever changing. If you are interested in going down this rabbit hole you may use these links as starting points but be prepared to adapt them.

https://felipe-herranz.medium.com/uncertify-a-tool-for-recompiling-android-apps-bypassing-different-certificate-pinning-techniques-de3d30ded2c6

https://gist.github.com/approovm/e550374428065ff1ecafca6a0488d384

https://frida.re/

https://codeshare.frida.re/browse

Best of luck.

[–] MigratingtoLemmy@lemmy.world 2 points 1 year ago

Thanks, I had heard of frida before, but never tried it. I'll save this comment, many thanks for the pointers!

[–] ShellMonkey@lemmy.socdojo.com 2 points 1 year ago (1 children)

That's the sum of it. Like others and I have noted some mobile apps (and Apple phones in particular have their entire OS configured to not trust any intercepted certs when attempting to speak to Apple home base) are prone to using certificate pinning and will reject the intercepted certs regardless of the trust store. It's mostly beneficial for adjusting the browser.

If I might ask, what's the purpose of this proxy? Functionally there are a lot simpler and more efficient ways to block traffic from a phone. If it's more for traffic inspection I've seen a couple VPN based pcap apps for Android that could get a lot more detail while a DNS filter could both control and give visibility to traffic from the device without all the cert hassles.

[–] MigratingtoLemmy@lemmy.world 2 points 1 year ago (1 children)

Thanks, I didn't realise that certificate pinning was this strict.

This effort is to check if my mobile has a baseband processor that might be communicating with the internet. I want to know if my device has a backdoor in hardware. The idea with a VPN has me intrigued, could you tell me more about that?

[–] ShellMonkey@lemmy.socdojo.com 3 points 1 year ago* (last edited 1 year ago) (1 children)

https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture

Something like that should ship all traffic through a local VPN adapter and output a standard pcap file.

Another option if you have a bit more fancy networking available is to set up a security onion instance, then mirror a port on the network and just capture everything at an on-wire level. That would also cover things beyond just web traffic to catch other things like ssh or whatever other remote connectivity could be in play. Seeing the content of the connection is different than just seeing the connections existence though. The endpoint generally has the best visibility before data gets pushed into a a connection but unless you start getting into kernel level debugging it can still be hard to see into the behavior of internal applications.

https://play.google.com/store/apps/details?id=eu.faircode.netguard

This is also a local VPN way of seeing all the outgoing traffic along with allowing control of it as a local firewall.

[–] MigratingtoLemmy@lemmy.world 1 points 1 year ago

Hi, thanks for the resources. However, I don't think I'll be able to decrypt the traffic from my mobile using this, yes? Using a VPN for this is a great idea though, this also happens to be how NoRoot firewalls work on Android